by 수박남자 [SQL Query] SQL JOIN WHERE [2012.08.23 00:55:41]
간략하게 상황을 설명드리자면
TARGET TABLE에 TBL_AA 에서 값을 가져와 INSERT 하는데 데이터에서 문제가 있어
TBL_A와 TBL_B를 조인한 결과 (를 이용, TBL_AA에서 문제가 있는 데이터를 걸러내려 했습니다.
즉 TBL_AA.PRB1, TBLAA.PRB2 두 컬럼의 값이 TBL_BB.FILTER_VALUE 칼럼의 값 안에 있어야 합니다.
기본적으로 생각했던 SQL은 아래와 같았습니다.
INSERT INTO TARGET_TABLE ( ID, COL_A, COL_B, PRB_1, PRB_2, ) SELECT AA.ID ID , AA.COL_A COL_A, AA.COL_B COL_B, AA.PRB_1 PRB_1, AA.PRB_2 PRB_2, FROM TBL_AA AA, (SELECT A.CD FILTER_VALUE FROM TBL_A A WHERE A.ID = 'ID' AND EXISTS (SELECT 'X' FROM TBL_B B WHERE A.CD = B.ID AND A.COL_A = B.COL_A )) TBL_BB WHERE AA.PBR1 IN TBL_BB.FILTER_VALUE AND AA.PRB2 IN TBL_BB.FILTER_VALUE
그런데 WHERE 절의 조건이 하나인 경우는 결과가 정상적으로 나오지만 AND로 묶은 결과는
계속 NULL 이 나오더라구요.
즉 WHERE AA.PBR1 IN TBL_BB.FILTER_VALUE 이거나 WHERE AA.PRB2 IN TBL_BB.FILTER_VALUE
인 경우는 정상적으로 값이 들어오지만 반쪽 결과여서 쓸모가 없고, AND로 묶는 경우는
NULL 이 나오는 상황이었습니다.
자포자기삼아 OR을 써보기도 했는데 결과는 의미없음. 이었구요. ㅠ_ㅜ
결국 현재는 각각의 결과를 만들어 INTERSECT를 해버렸습니다.
아래처럼요.
INSERT INTO TARGET_TABLE ( ID, COL_A, COL_B, PRB_1, PRB_2, ) (SELECT AA.ID ID , AA.COL_A COL_A, AA.COL_B COL_B, AA.PRB_1 PRB_1, AA.PRB_2 PRB_2, FROM TBL_AA AA, (SELECT A.CD FILTER_VALUE FROM TBL_A A WHERE A.ID = 'ID' AND EXISTS (SELECT 'X' FROM TBL_B B WHERE A.CD = B.ID AND A.COL_A = B.COL_A )) TBL_BB WHERE AA.PBR1 IN TBL_BB.FILTER_VALUE INTERSECT SELECT AA.ID ID , AA.COL_A COL_A, AA.COL_B COL_B, AA.PRB_1 PRB_1, AA.PRB_2 PRB_2, FROM TBL_AA AA, (SELECT A.CD FILTER_VALUE FROM TBL_A A WHERE A.ID = 'ID' AND EXISTS (SELECT 'X' FROM TBL_B B WHERE A.CD = B.ID AND A.COL_A = B.COL_A )) TBL_BB WHERE AA.PRB2 IN TBL_BB.FILTER_VALUE) ;
도움을 요청드립니다. ㅠ_ㅜ
감사합니다.