안녕하세요..
궁금한점이 있어서 문의드려요...
---------------------------------------------------------------------------------------------
테이블은 A, B, B1 테이블 있구요...
A 테이블이 주 테이블이구요...
B는 B로시작는 SMB_ID 필드에는 5자리 데이터가 있구요...(예 : B1001, B0020)
B1는 C로시작는 SMB_ID 필드에는 5자리 데이터가 있구요...(예 : C2001, C0010)
A의 SMB_ID 필드에는 모두 B, B1의 SMB_ID 값이 모두 있습니다.(예 : B1001, C0010, D0020)
---------------------------------------------------------------------------------------------
A 테이블의 SMB_ID 값이 있지만 B 또는 B1에는 A 테이블의 SMB_ID 없을 수도 있습니다.
이런경우 A 테이블에도 있고 B, B1에 데이터가 있는 경우에만 데이터를 추출하고 싶은데
어떤 조인을 걸어야 할까요???
예를 들어 A 테이블 SMB_ID 값이 B에는 없지만 B1의 SMB_ID 해당하는 값이 있다면 B1의
데이터는 나와겠죠...(B 테이블은 0건, B1 테이블에는 1건 그래서 전체 ROWS 1건의 데이터)
UNION ALL 이나 OUTER JOIN 후 처리는 하는 방법도 있기는 한데 그 방법 말고는 없느지
궁금해서 문의 드립니다.
참고로 각 테이블 건수는 각각 백만건 이상입니다.
---------------------------------------------------------------------------------------------
A테이블
SMB_ID | SUB_CODE | ETC_INFO | SMB_DATE |
---|---|---|---|
C2001 | 05 | 가나다라 | 20171101 |
B9001 | 07 | 가나다라 | 20171103 |
D0020 | 45 | 가나다라 | 20171001 |
B테이블
SMB_ID | SMB_INFO | SMB_DATE |
---|---|---|
B7001 | 가나다라 | 20171001 |
B8001 | 가나다라 | 20171001 |
B1테이블
SMB_ID | SMB_CHECK_CODE | SMB_DATE |
C2001 | A001 | 20171101 |
C9999 | A101 | 20171101 |
-------------------------------------------------------------------------------------------
WITH A ( SMB_ID , SUB_CODE , ETC_INFO , SMB_DATE )AS ( SELECT 'C2001' , '05' ,'가나다라' ,'20171101' FROM DUAL UNION ALL SELECT 'B9001' , '07' ,'가나다라' ,'20171103' FROM DUAL UNION ALL SELECT 'D0020' , '45' ,'가나다라' ,'20171001' FROM DUAL ), B ( SMB_ID , SMB_INFO , SMB_DATE ) AS ( SELECT 'B7001' , '가나다라' ,'20171001' FROM DUAL UNION ALL SELECT 'B8001' , '가나다라' ,'20171001' FROM DUAL ), B1 (SMB_ID , SMB_CHECK_CODE , SMB_DATE) AS ( SELECT 'C2001' , 'A001' ,'20171101' FROM DUAL UNION ALL SELECT 'C9999' , 'A101' ,'20171101' FROM DUAL ) SELECT A.* , B.SMB_ID FROM A , ( SELECT SMB_ID FROM B UNION ALL SELECT SMB_ID FROM B1 ) B WHERE A.SMB_ID = B.SMB_ID