2

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

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

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

我对这里使用括号有什么不明白的地方?

4

1 回答 1

7

AND具有比OR(参见文档)更高的优先级,因此没有括号,查询等效于:

 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
于 2013-03-25T15:51:15.137 回答