奇怪的结果在SQL中没有使用NULL查询

时间:2014-02-07 11:41:49

标签: sql sql-server sql-server-2008 qsqlquery

任何人都可以向我解释为什么我会得到不同的结果:

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)

预期结果:Table1Table2

无关的项目

SQL server版本:10.50.3720.0 操作系统:Microsoft Windows NT 6.1(7601)

2 个答案:

答案 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