좀 봐주세요. 0 2 2,209

by 김재훈 [SQL Query] 오라클 join left join 테이블 [2014.11.27 10:26:00]


고민고민 하다 도움 요청합니다.

현재 하고자하는 내용은 테이블 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 했는데..

이렇게 하면 될까요? 아니면 더 좋은 방법이 있나요?

.추가적인 내용필요하시면 알려주세요.

수고하십시오.

by 마농 [2014.11.27 11:03:57]
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
;

 


by 김재훈 [2014.11.27 14:24:43]

^^ 감사합니다.

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