외래키와 count 관해서 질문드립니다 0 2 1,877

by Tbread [MySQL] [2023.02.03 16:40:32]


 

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테이블의 행개수 만큼 추가로 쿼리하는데

 

한번에 할수있는 방법이있는지 궁금합니다

by 우주민 [2023.02.03 17:25:28]
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

 


by 마농 [2023.02.06 08:58:07]
-- 그룹핑 후 조인 --
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
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입