고민고민 하다 도움 요청합니다.
현재 하고자하는 내용은 테이블 3개를 조인하는 건데요...
먼저 3개테이블의 값이 전부나와야되고요....그중에 각각 매칭이 되는 값들은 서로 물려서 나오게 하려고 합니다.
예를들어
A_TABLE
ORDER_NO | TID |
B_TABLE
TID | GUBUN | REG_DATE |
C_TABLE
ORDER_NO | POSNR | VDATU |
이렇게 3개의 테이블을 조인하려고 합니다.
A테이블과 B테이블은 TID, A테이블과 C테이블은 ORDER_NO, B와C는 서로 비교할수있는 값이 없는데요
A테이블에 10개 , B테이블 20개, C테이블 5개씩 ROW가 있다고 한다면
서로 매칭되는 값이 없다면 총 35개의 ROW가 나와야되고, 매칭되는 값이 있다면 한줄에 나오게 하려고 합니다.
일단 제가 한방법은
SELECT AA.ORDER_NO, AA.TID,AA.C_ORD, AA.POSNR, AA.VDATU, B.TID, B.GUBUN, B.REG_DATE
FROM(
SELECT A.ORDER_NO, A.TID, C.ORDER_NO AS C_ORD, C.POSNR, C.VDATU
FROM A_TABLE A LEFT JOIN C_TABLE C ON A.ORDER_NO = C.ORDER_NO
UNION
SELECT A.ORDER_NO, A.TID, C.ORDER_NO AS C_ORD, C.POSNR, C.VDATU
FROM C_TABLE C LEFT JOIN A_TABLE A ON C.ORDER_NO = A.ORDER_NO
) AA
LEFT JOIN B_TABLE B ON AA.TID = B.TID
UNION
SELECT AA.ORDER_NO, AA.TID,AA.C_ORD, AA.POSNR, AA.VDATU, B.TID, B.GUBUN, B.REG_DATE
FROM B_TABLE B
LEFT JOIN (
SELECT A.ORDER_NO, A.TID, C.ORDER_NO AS C_ORD, C.POSNR, C.VDATU
FROM A_TABLE A LEFT JOIN C_TABLE C ON A.ORDER_NO = C.ORDER_NO
UNION
SELECT A.ORDER_NO, A.TID, C.ORDER_NO AS C_ORD, C.POSNR, C.VDATU
FROM C_TABLE C LEFT JOIN A_TABLE A ON C.ORDER_NO = A.ORDER_NO
) AA ON B.TI = AA.TID
이런식으로 먼저 A와 C를 UNION으로 하고 나서 이걸 한테이블로 보고 B와 다시 UNION 했는데..
이렇게 하면 될까요? 아니면 더 좋은 방법이 있나요?
.추가적인 내용필요하시면 알려주세요.
수고하십시오.
WITH a_table AS ( SELECT 1 order_no, 7 tid FROM dual UNION ALL SELECT 2, 8 FROM dual ) , b_table AS ( SELECT 8 tid, 0 gubun, 0 reg_date FROM dual UNION ALL SELECT 9, 0, 0 FROM dual ) , c_table AS ( SELECT 2 order_no, 0 posnr, 0 vdatu FROM dual UNION ALL SELECT 3, 0, 0 FROM dual ) SELECT a.order_no, a.tid , b.tid, b.gubun, b.reg_date , c.order_no, c.posnr, c.vdatu FROM a_table a FULL OUTER JOIN b_table b ON a.tid = b.tid FULL OUTER JOIN c_table c ON a.order_no = c.order_no ;