2014年11月6日木曜日

NULLがあると「NOT IN」と「NOT EXISTS」は変換できない。


NULLがあると「NOT IN」と「NOT EXISTS」は変換できない。(「IN」と「EXISTS」は変換可能)
CREATE TABLE #T2(name varchar(100))
CREATE TABLE #T3(name varchar(100))
INSERT INTO #T2 VALUES ('ABC'),('DEF'),('GHI')
INSERT INTO #T3 VALUES ('ABC'),('DEF'),(NULL)


SELECT *
 FROM #T2 t2
 WHERE EXISTS (SELECT * FROM #T3 WHERE t2.name = #T3.name)

SELECT *
 FROM #T2 t2
 WHERE t2.name IN (SELECT * FROM #T3)


SELECT *
 FROM #T2 t2
 WHERE NOT EXISTS (SELECT * FROM #T3 WHERE t2.name = #T3.name)
--NOT EXISTSと結果が違う。(NULLが#T2にある場合も「NOT IN」と「NOT EXISTS」で結果が異なる)
SELECT *
 FROM #T2 t2
 WHERE t2.name NOT IN (SELECT * FROM #T3)


DROP TABLE #T2
DROP TABLE #T3

0 件のコメント:

コメントを投稿