안녕하세요.
1:N 으로 연결된 4개의 테이블이 있습니다.
TABLE A
ID
----
A
B
C
TABLE B
ID PW
------
A AAA
B BBB
C CCC
TABLE C
ID FAMILY
---------
A 홍길동
A 임꺽정
A 성춘향
B 네이버
B 다음
TABLE D
ID FRIEND
---------
A 가나다
B 라마바
B 자차카
C 타파하
------------------------------------------------------
보여주고자하는 데이타
-------------------------------------------------------
ID PW FAMILY FRIEND
A AAA 홍길동 가나다
A 임꺽정
A 성춘향
B BBB 네이버 라마바
B 다음 자차카
C CCC 타파하
B/C/D 테이블간에는 연관관계가 없습니다. (오직 A로만 연관)
그냥 outer로 하면 b c d 까지 outer가 되어 너무 많은 row가 나옵니다.
쿼리로 가능할까요?... (MySQL)
감사합니다.
조인키가 없으므로 인조 조인키를 만들어 줘야 합니다.
ROW_NUMBER() OVER(PARTITION BY id ORDER BY 1) 이런 식입니다.
각 테이블마다 ID 별 순번을 부여하여 이 순번으로 조인하면 되는데...
MySQL 에서는 ROW_NUMBER 기능이 없죠.
SELECT a.id , b.pw , f.family , f.friend FROM tab_a a INNER JOIN tab_b b ON a.id = b.id LEFT OUTER JOIN (SELECT id , rn , MIN(family) family , MIN(friend) friend FROM (SELECT c.id , COUNT(c1.id) rn , c.family , null friend FROM tab_c c LEFT OUTER JOIN tab_c c1 ON c.id = c1.id AND c.family > c1.family GROUP BY c.id, c.family UNION ALL SELECT d.id , COUNT(d1.id) rn , null family , d.friend FROM tab_d d LEFT OUTER JOIN tab_d d1 ON d.id = d1.id AND d.friend > d1.friend GROUP BY d.id, d.friend ) e GROUP BY id, rn ) f ON a.id = f.id ORDER BY id, rn ;