sql - 影响查询结果的括号

标签 sql sql-server tsql

我对正在运行的查询的结果感到困惑。希望这不会以我拍打自己的脑袋并感觉自己像个白痴而告终,但现在开始了(SQL Server 2008)。

第一个查询是这样的:

SELECT p.product_number,p.long_desc
FROM products p
WHERE p.prod_status = 1
AND ((p.long_desc IS NULL) OR (p.long_desc LIKE '%N/A%'))
ORDER BY p.product_number

第二个版本是这样的:

 SELECT p.product_number,p.long_desc
 FROM products p
 WHERE p.prod_status = 1
 AND p.long_desc IS NULL 
 OR p.long_desc LIKE '%N/A%'
 ORDER BY p.product_number

第二个版本中有三个产品没有出现在第一个版本中,但对我来说这两个查询应该给出相同的结果。出现在第二个但不是第一个的三个项目在 long_desc 列中都具有值 N/A

但是还有很多其他的N/A 也出现在两个版本中。

关于此处使用括号,我有什么不明白的地方?

最佳答案

AND 的优先级高于 OR(参见 documentation ),因此没有括号,查询等同于:

 SELECT p.product_number,p.long_desc
 FROM products p
 WHERE (p.prod_status = 1
 AND p.long_desc IS NULL) 
 OR p.long_desc LIKE '%N/A%'
 ORDER BY p.product_number

关于sql - 影响查询结果的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15619106/

相关文章:

sql-server - 如果发现 SQL Server 2012 出现死锁,我该怎么办?是否有一套我可以遵循的规则/步骤来摆脱它

sql - 在存储过程中重用 SELECT 查询的结果

mysql - 显示结果 - 根据条件将 1 列中的数据分为 2 列

sql-server - 检查是否安装了SQL Server客户端

sql-server - SQL Server Analysis Services - 我有吗?

sql-server - SQL Server 存储过程需要未提供的参数

mysql - 如何返回 MySQL 中 "custom"排序的记录

mysql - 错误 #1054 - 尝试将 CSV 文件导入数据库时​​字段列表中出现未知列

sql - SQL WHERE 子句中的 IF 语句

sql - 如何使用 RANK 对匹配记录进行分组