【问题标题】:IN clause, NULL handling in TSQL/SQL Server?IN 子句,TSQL/SQL Server 中的 NULL 处理?
【发布时间】:2011-11-05 09:24:47
【问题描述】:

假设有一个这样的表:

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

...但与IN 类似的查询不返回任何结果:

SELECT f2
  FROM Table_1 a
 WHERE f2 NOT IN (SELECT b.f1 
                    FROM Table_1 b)

有什么问题?

【问题讨论】:

  • 最里面的 SELECT 在您的第一个查询中与 Table_1 相悖,在您的第二个查询中与 tbltemp b 相悖 - 只是一个错字??
  • 是的 marc_s 对不起。我犯了一个错误

标签: sql-server tsql sql-server-2008 exists


【解决方案1】:

这是因为 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)

这里有一个很好的解释为什么会这样。 NOT IN clause and NULL values

【讨论】:

猜你喜欢
  • 2011-12-16
  • 2014-02-06
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
  • 2016-05-13
相关资源
最近更新 更多