포시코딩

SubQuery 대신 LEFT JOIN 본문

MySQL

SubQuery 대신 LEFT JOIN

포시 2023. 10. 6. 13:57
728x90
SELECT
	u.userIdx, 
	u.name, 
	(
		SELECT 
			GROUP_CONCAT(c.name SEPARATOR ',')
		FROM userCountries uc
		JOIN country c 
		ON uc.countryIdx = c.countryIdx 
		WHERE uc.userIdx = u.userIdx 
	) AS countries
FROM users u

만약 국가 뿐 아니라 성격, 취미 등과 같은 테이블이 추가되어

위와 같이 계속해서 서브쿼리를 사용하게 되면 쿼리 성능이 안좋아지기 때문에 애초에 LEFT JOIN을 활용하는 방법을 사용한다. 

 

SELECT
    u.userIdx,
    u.name,
    GROUP_CONCAT(c.name SEPARATOR ',') AS countries
FROM users u
LEFT JOIN userCountries uc ON u.userIdx = uc.userIdx
LEFT JOIN country c ON uc.countryIdx = c.countryIdx
GROUP BY u.userIdx, u.name

기존 DB들에서 위 쿼리를 활용할만한 부분이 많기 때문에 따로 정리

728x90