val*_*lis 2 sql t-sql sql-server
我对运行的查询结果感到困惑.希望这并不会因为我拍打我的头而感觉像个白痴一样,但是这里(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
Run Code Online (Sandbox Code Playgroud)
第二个版本是这样的:
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
Run Code Online (Sandbox Code Playgroud)
第二个版本中有三个产品没有出现在第一个版本中,但对我来说,这两个查询应该给出相同的结果.出现在第二,但不是首先在三个项目有值N/A的long_desc列.
然而,还有许多其他N/A版本也出现在两个版本中.
关于括号的使用,我对此无法理解?
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |