1. ホーム
  2. sql

xが複数の値に等しいところから選択する方法は?

2023-10-26 19:30:30

質問

私はいくつかのコードをデバッグしており、以下のSQLクエリ(簡易版)に遭遇しました。

SELECT ads.*, location.county 
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1 
AND ads.type = 13
AND ads.county_id = 2
OR ads.county_id = 5
OR ads.county_id = 7
OR ads.county_id = 9

このクエリから非常に奇妙な結果が得られますが、これは最初の OR がその前に見つかった AND 演算子を否定しているためだと思います。

この結果、タイプ 13 だけでなく、すべてのタイプの広告の結果が返されることになります。

クエリーが呼び出されるたびに、検索する必要のある郡のエンティティが異なる場合があります。

これを行うための正しい方法についてのヘルプがあれば、感謝します。

どのように解決するのですか?

OR"を括弧で囲みます。

SELECT ads.*, location.county 
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1 
AND ads.type = 13
AND
(
    ads.county_id = 2
    OR ads.county_id = 5
    OR ads.county_id = 7
    OR ads.county_id = 9
)

あるいはさらに、INを使う。

SELECT ads.*, location.county 
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1 
AND ads.type = 13
AND ads.county_id IN (2, 5, 7, 9)