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
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿