任何人都可以向我解释为什么我会得到不同的结果:
Table2.Table1ID nullable
字段
SELECT * FROM Table1
WHERE
ID NOT IN (SELECT Table1ID FROM Table2)
没有结果
SELECT * FROM Table1
WHERE
ID NOT IN (SELECT Table1ID FROM Table2 WHERE Table1ID IS NOT NULL)
预期结果:Table1
与Table2
SQL server版本:10.50.3720.0 操作系统:Microsoft Windows NT 6.1(7601)
答案 0 :(得分:1)
如果Table2中的任何值都有null
,则第一个查询将被转换为
SELECT * FROM Table1
WHERE (ID <> NULL and ID <> SomeValue and...)
ID<>NULL
未知。你没有得到任何结果
其中,在您的第二个查询中,您正在消除NULL
.Hence,您没有获得未知值。
您也可以使用Not Exists
SELECT * FROM Table1
WHERE
NOT Exists (SELECT 1 FROM Table2 where Table1ID = ID )
答案 1 :(得分:0)
SELECT * FROM Table1
WHERE
ID NOT IN (SELECT ISNULL(Table1ID, ' ') FROM Table2)
带有NOT IN
的 NULL
最终将无法满足所有条件!
它也和oracle一样!
NOT IN
... NULL 明显是假设的!..没有什么,字面上甚至不是一个有效的不是它!< / p>
NULL
就像未定义那样。所以我们有可用于处理NULL
的特殊函数。即使是进行比较,我们也会使用IS NULL
和不 = NULL