2

実行しているクエリの結果に混乱しています。うまくいけば、これは私が頭を叩いて馬鹿のように感じることで終わらないでしょうが、ここに行きます(SQL Server2008)。

最初のクエリはこれでした:

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

2番目のバージョンはこれです:

 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

2番目のバージョンには最初のバージョンには表示されない3つの製品がありますが、私にとっては、これら2つのクエリで同じ結果が得られるはずです。2番目に表示されるが最初には表示されない3つの項目はすべてN/Along_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 に答える