안녕하세요 선배님들 ! 공부가 미흡하여 어떻게 작성해야 옳은건지 판단이 안됩니다 ㅠㅠ..
테이블이 A1, B1, C1, D1 , A2, B2, C2, D2 가 있습니다.
ORACLE 사용자만 다르게 들어간 테이블은 2로 네이밍 했습니다.
SELECT * FROM( SELECT * FROM A1 INNER JOIN B1 ON (A1.CD = B1.CD) WHERE ~~ 공통조건 ) AB1 LEFT OUTER JOIN ( SELECT * FROM C1 INNER JOIN D1 ON (C1.CD = D1.CD) WHERE ~~ 공통조건 ) CD1 ON (AB1.CD = CD1.CD) UNION ALL SELECT * FROM( SELECT * FROM A2 INNER JOIN B2 ON (A2.CD = B2.CD) WHERE ~~ 공통조건 ) AB2 LEFT OUTER JOIN ( SELECT * FROM C2 INNER JOIN D2 ON (C2.CD = D2.CD) WHERE ~~ 공통조건 ) CD2 ON (AB2.CD = CD2.CD)
전 FULL SCAN을 최대한 방지해보려 공통조건을 각각 다 주었는데 다 짜고보니 너무 쿼리가 더러운것같아서요... 이런방식으로 짜는게 맞는건가요 ?ㅠㅠ..
서브 쿼리가 필요 없을 것 같은데요.
SELECT * FROM A1 INNER JOIN B1 ON (A1.CD = B1.CD) LEFT OUTER JOIN C1 ON (A1.CD = C1.CD) AND C1에 대한 조건 LEFT OUTER JOIN D1 ON (A1.CD = D1.CD) AND D1에 대한 조건 WHERE A1, B1에 대한 조건 UNION ALL SELECT * FROM A2 INNER JOIN B2 ON (A2.CD = B2.CD) LEFT OUTER JOIN C2 ON (A2.CD = C2.CD) AND C2에 대한 조건 LEFT OUTER JOIN D2 ON (A2.CD = D2.CD) AND D2에 대한 조건 WHERE A2, B2에 대한 조건;