0

谁能向我解释为什么我得到不同的结果:

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 服务器版本:10.50.3720.0 操作系统:Microsoft Windows NT 6.1 (7601)

4

2 回答 2

1

如果 Table2 中的任何值具有,null则第一个查询将被转换为

SELECT * FROM Table1
WHERE (ID <> NULL and ID <> SomeValue and...)

ID<>NULL是未知的。因此你没有得到任何结果

其中,在您的第二个查询中,您正在消除NULL.Hence 您没有得到 unknown value 。

您还可以使用Not Exists

SELECT * FROM Table1
WHERE
NOT Exists (SELECT 1  FROM Table2 where Table1ID = ID )
于 2014-02-07T11:50:08.480 回答
0
SELECT * FROM Table1
WHERE
ID NOT IN (SELECT ISNULL(Table1ID, ' ') FROM Table2)

NOT INNULL最终将失败所有条件!oracle也一样!

NOT IN... NULL显然是假设的!.. 不是什么都不是,从字面上看,甚至不是一个有效的,不是吗!

NULL是一些东西,就像没有定义..所以我们有特殊的功能可以处理NULL。即使是为了比较,我们也使用IS NULLand Not = NULL

于 2014-02-07T11:44:45.340 回答