我对正在运行的查询的结果感到困惑。希望这不会以我拍打自己的脑袋并感觉自己像个白痴而告终,但现在开始了(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/