A 테이블과 B 테이블이 있고
A테이블에는 c,d라는 컬럼을 가지고 있습니다
B테이블에는 A의 pk를 fk로 가지고있고 중복으로 가지고 있을수도 있습니다
여기서 a 테이블의 정보를 가져옴과 동시에
해당 a테이블의 pk 를 가지고 있는 b테이블 행의 개수를 한번에 출력할수있는 쿼리문이 있을까요?
현재는 select pk,c,d from a
로 리스트를 가져오고
해당 리스트를 for문으로 돌며
select count(case when fk = (for로 주입해준 a의 pk)) 이런식으로 1회 + a테이블의 행개수 만큼 추가로 쿼리하는데
한번에 할수있는 방법이있는지 궁금합니다
SELECT T1.PK, T1.C, T1.D, T2.CNT FROM A T1 LEFT OUTER JOIN (SELECT FK, COUNT(1) AS CNT FROM B GROUP BY FK) T2 ON T1.PK = T2.FK
-- 그룹핑 후 조인 --
SELECT a.pk, a.c, a.d
, IFNULL(b.cnt, 0) cnt
FROM a a
LEFT OUTER JOIN (SELECT fk, COUNT(*) cnt FROM b GROUP BY fk) b
ON a.pk = b.fk
;
-- 조인 후 그룹핑 --
SELECT a.pk, a.c, a.d
, COUNT(b.fk) cnt
FROM a a
LEFT OUTER JOIN b b
ON a.pk = b.fk
GROUP BY a.pk, a.c, a.d
;