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