在 SQL Server 上工作,我试图根据某些条件计算总行数,如下面的简单查询所示:
SELECT count(*) FROM my_table WHERE (supp=92 OR (supp=94 and organisation <> 'LDF'))
知道 my_table 不包含任何带有 supp=92
和 organization='LDF'
的行,我决定使查询更简单,如下所示:
SELECT count(*) FROM my_table WHERE supp IN (92,94) and organisation <> 'LDF'
两次查询的结果完全不同。
然而,这些查询对我来说看起来完全一样,我一直在试图找出问题所在,但找不到答案。
这对我来说真的很困惑,提前感谢您的回答。
最佳答案
如果您的 organization
列包含任何 supp=92
的 NULL
值,第一个查询将返回它们,但第二个查询将排除它们。这是因为这段代码:
organisation <> 'LDF'
如果组织字段为 NULL,将返回“NULL”,而不是“TRUE”。
我建议您阅读 Robert Shelden 的优秀文章,了解 NULL 可能给您带来的各种麻烦;整篇文章值得一读,但是the ninth point谈论这个具体场景。
关于SQL Server,IN 运算符显示不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34272976/