SQL で AND と OR を使用するときに問題があります。
これは単一のレコードを返します:
SELECT DISTINCT s.SupplierName, r.ReturnID, r.Reason
FROM tblSupplierProducts sp, tblReturns r,tblSuppliers s
WHERE sp.SupplierID=s.SupplierID
AND sp.ProductID=r.productID
AND r.Reason LIKE 'Unreadable disk'
これも単一のレコードを返します。
SELECT DISTINCT s.SupplierName, r.ReturnID, r.Reason
FROM tblSupplierProducts sp, tblReturns r,tblSuppliers s
WHERE sp.SupplierID=s.SupplierID
AND sp.ProductID=r.productID
AND r.Reason LIKE 'Scratched CD'
しかし、私がこれを行うとき:
SELECT DISTINCT s.SupplierName, r.ReturnID, r.Reason
FROM tblSupplierProducts sp, tblReturns r,tblSuppliers s
WHERE sp.SupplierID=s.SupplierID
AND sp.ProductID=r.productID
AND r.Reason LIKE 'Unreadable disk'
OR r.Reason LIKE 'Scratched CD'
「読み取り不能ディスク」の結果は存在し、正しいですが、「傷のある CD」はそうではありません (異なるサプライヤーごとに同じ値を持ちます)。次のように交換した場合:
SELECT DISTINCT s.SupplierName, r.ReturnID, r.Reason
FROM tblSupplierProducts sp, tblReturns r,tblSuppliers s
WHERE sp.SupplierID=s.SupplierID
AND sp.ProductID=r.productID
AND r.Reason LIKE 'Scratched CD'
OR r.Reason LIKE 'Unreadable disk'
最初の結果は正しい (「傷のある CD」) ですが、「読み取り不能なディスク」は複数のサプライヤーに対して同じ値を返します。
AND OR がクエリを台無しにしているように見えるのはなぜですか?