SQL Server,IN 运算符显示不同的结果

标签 sql sql-server

在 SQL Server 上工作,我试图根据某些条件计算总行数,如下面的简单查询所示:

SELECT count(*) FROM my_table WHERE (supp=92 OR (supp=94 and organisation <> 'LDF'))

知道 my_table 不包含任何带有 supp=92organization='LDF' 的行,我决定使查询更简单,如下所示:

SELECT count(*) FROM my_table WHERE supp IN (92,94) and organisation <> 'LDF'

两次查询的结果完全不同。

然而,这些查询对我来说看起来完全一样,我一直在试图找出问题所在,但找不到答案。

这对我来说真的很困惑,提前感谢您的回答。

最佳答案

如果您的 organization 列包含任何 supp=92NULL 值,第一个查询将返回它们,但第二个查询将排除它们。这是因为这段代码:

organisation <> 'LDF'
如果组织字段为 NULL,

将返回“NULL”,而不是“TRUE”。

我建议您阅读 Robert Shelden 的优秀文章,了解 NULL 可能给您带来的各种麻烦;整篇文章值得一读,但是the ninth point谈论这个具体场景。

关于SQL Server,IN 运算符显示不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34272976/

相关文章:

php - 从Mysql表中获取分类和子分类

sql - 如何连接/连接 SQLite 中分组列中的字符串?

SQL Server 在单个查询中对多个表求和

sql - 重构使用 row_number() 返回具有唯一列值的行的 tsql View

sql-server - 撤销与拒绝 : what is the difference

sql - 由于内存压力,AppDomain 被标记为卸载

sql - 递归 MySQL 查询

sql - 引用 QueryDSL 中的子查询字段

sql - 显示季度可用的月份名称

sql-server - 使用 ROW_NUMBER 和动态排序依据的 SQL 性能