하나의 쿼리로 작성할 예정입니다.
마스터 테이블
A
B
C
조인테이블 (약 1천만건)
A , P1
A, P2
B,P2
B,P3
C,P1
C,P2
C,P4
가 있을때,, 마스터 기준으로 없는데이터만 가져오려고 합니다. 즉
A, B,P3
A,C,P4
B, A,P1
B,C,P4
C,B,P3
가 될까요?
WITH mst_t AS ( SELECT 'A' cd1 FROM dual UNION ALL SELECT 'B' FROM dual UNION ALL SELECT 'C' FROM dual ) , data_t AS ( SELECT 'A' cd1, 'P1' cd2 FROM dual UNION ALL SELECT 'A', 'P2' FROM dual UNION ALL SELECT 'B', 'P2' FROM dual UNION ALL SELECT 'B', 'P3' FROM dual UNION ALL SELECT 'C', 'P1' FROM dual UNION ALL SELECT 'C', 'P2' FROM dual UNION ALL SELECT 'C', 'P4' FROM dual ) SELECT a.cd1, b.cd2 FROM mst_t a LEFT OUTER JOIN data_t b PARTITION BY (b.cd2) ON a.cd1 = b.cd1 WHERE b.cd1 IS NULL ORDER BY a.cd1, b.cd2 ;
-결과- CD1 CD2 --- --- A P3 A P4 B P1 B P4 C P3
마농님 너무 감사합니다~
그런데 한컬럼이 더 필요한데 역시나..잘안되네요.ㅠ
P3를 가진 조인테이블의 CD1 컬럼이 하나만 나오면되는구조에요..
-결과-
CD1 CD1 CD2 --- --- A B P3 A C P4 B A P1 B C P4 C B P3
SELECT cd1, cd3, cd2 FROM (SELECT a.cd1 , MIN(b.cd1) OVER(PARTITION BY b.cd2) cd3 , b.cd2 , b.cd1 x FROM mst_t a LEFT OUTER JOIN data_t b PARTITION BY (b.cd2) ON a.cd1 = b.cd1 ) WHERE x IS NULL ORDER BY cd1, cd3 ;