SELECT * FROM dbo.Calendars WHERE calname NOT IN(NULL)
我的问题是为什么总是 NOT IN(NULL)什么都不返回? PS :无论您的桌子是什么,如果您将 NOT IN(NULL)添加到任何列的条件,结果就是什么都没有。 提前谢谢你:)
答案 0 :(得分:7)
因为value equals NULL
未定义,并且永远不会评估为True。
检查This post on bad practices。不要使用IN
和NULL
,请使用EXISTS
来测试至少存在某一行的行。
答案 1 :(得分:3)
NULL
的处理方式不同。例如,这个谓词永远不会成立:
WHERE foo = NULL
如果foo
的值确实为NULL
,则此谓词为真:
WHERE foo IS NULL
对于您的问题,如果您只想检查calname
是否为空,请使用以下谓词:
WHERE calname IS NOT NULL
另一方面,如果你有一组值,其中NULL
是其中一个值(比如[1,2,3,4,NULL]),你仍然想要使用{ {1}}语法,你必须这样做:
NOT IN
编辑:执行此操作的另一种方法是,如果您被限制使用WHERE calname IS NOT NULL AND calname NOT IN(1, 2, 3, 4)
语法,则将NOT IN
列COALESCE
转换为您肯定知道未存储的值那一栏。例如,如果calname
只能取正整数值,那么我们可以这样做:
calname
答案 2 :(得分:3)
您的查询评估为calname<> null,这会导致UNKNOWN。
将您的查询更改为此
SELECT * FROM dbo.Calendars WHERE calname IS NOT NULL;