테스트 환경 : Oracle 9i
아래와 같은 쿼리가 있다.
SELECT * FROM TMP1
WHERE PAT_NO NOT IN (SELECT PAT_NO FROM TMP2)
;
WHERE PAT_NO NOT IN (SELECT PAT_NO FROM TMP2)
;
결과가 안나온다.
분명히 TMP1에는 있고 TMP2에는 없는 PAT_NO가 있는데...
쿼리를 바꿔보았다.
SELECT A.* FROM TMP1 A
WHERE NOT EXISTS (SELECT 1 FROM TMP2 WHERE PAT_NO = A.PAT_NO)
;
WHERE NOT EXISTS (SELECT 1 FROM TMP2 WHERE PAT_NO = A.PAT_NO)
;
PAT_NO가 NULL인것 까지 몽땅 나온다. 췟..
SELECT A.* FROM TMP1 A
WHERE NOT EXISTS (SELECT 1 FROM TMP2 WHERE PAT_NO = A.PAT_NO)
AND A.PAT_NO IS NOT NULL
;
WHERE NOT EXISTS (SELECT 1 FROM TMP2 WHERE PAT_NO = A.PAT_NO)
AND A.PAT_NO IS NOT NULL
;
원하는 결과가 나왔다.
혹시나 하는 맘에 첫번재 쿼리를 바꿔보았다.
SELECT A.* FROM TMP1 A
WHERE NOT EXISTS (SELECT 1 FROM TMP2 WHERE PAT_NO = A.PAT_NO WHERE PAT_NO IS NOT NULL)
;
WHERE NOT EXISTS (SELECT 1 FROM TMP2 WHERE PAT_NO = A.PAT_NO WHERE PAT_NO IS NOT NULL)
;
결과가 나온다... 젠장...
뭐가 다른지 잘 모르겠다. 쩝...