Sql server 在子句中,TSQL/SQL Server中的NULL处理?
假设有这样一张表:Sql server 在子句中,TSQL/SQL Server中的NULL处理?,sql-server,tsql,sql-server-2008,exists,Sql Server,Tsql,Sql Server 2008,Exists,假设有这样一张表: f1 f2 ---------- 1 3 4 8 6 4 NULL 1 以下查询按预期工作: SELECT f2 FROM Table_1 a WHERE NOT EXISTS (SELECT * FROM Table_1 WHERE a.f2 = f1) …结果集为: f2 --- 3 8 …但类似的查询与中的不返回任何内容:
f1 f2
----------
1 3
4 8
6 4
NULL 1
以下查询按预期工作:
SELECT f2
FROM Table_1 a
WHERE NOT EXISTS (SELECT *
FROM Table_1
WHERE a.f2 = f1)
…结果集为:
f2
---
3
8
…但类似的查询与中的不返回任何内容:
SELECT f2
FROM Table_1 a
WHERE f2 NOT IN (SELECT b.f1
FROM Table_1 b)
有什么问题吗 这是因为f1中的null
值。试试这个
SELECT f2
FROM Table_1 a
WHERE f2 NOT IN (select b.f1
from Table_1 b
where b.f1 is not null)
这里有一个很好的解释来解释为什么会这样 几年前的类似问题。三态逻辑的常见问题。顺便说一句,“tbltemp”是我的错。它应该被替换为“Table_1”。在第一次查询中,最里面的选择与Table_1
不符,在第二次查询中与tbltemp b
不符-只是一个输入错误??是的,marc\s抱歉。我犯了一个错误