0

私がサポートする Web サイトは、次のような MySQL データベース クエリを実行します。

SELECT 
   person_per.per_ID 
FROM 
   person_per 
LEFT JOIN 
   person_custom 
ON 
   person_custom.per_ID=person_per.per_ID 
where 
   (per_City='Cathedral City') or 
   (per_City='Cherry Valley') or 
   (per_City='Coachella') or 
   [...and so on for several dozen cities...];

クエリは、指定された都市のリストのいずれかに住んでいる人々のセットを返すことになっています。クエリは見苦しく冗長ですが、問題なく動作します。

ただし、新しい要求は、 person_per.per_City フィールドだけでなく person_custom.work_City フィールドもチェックするようにクエリを変更して、指定された都市のいずれかに住んでいるか働いている人をクエリが返すようにすることです。

これを行う単純な方法は、次のように「or」句の数を単純に 2 倍にすることです。

SELECT 
  person_per.per_ID 
FROM 
  person_per 
LEFT JOIN 
  person_custom 
ON 
  person_custom.per_ID=person_per.per_ID 
where 
  (per_City='Cathedral City') or 
  (work_City='Cathedral City') or 
  (per_City='Coachella') or 
  (work_City='Coachella') or 
  [...and so on for several dozen cities...];

しかし、都市名のリスト全体を含む 20 行の SQL クエリよりも悪いのは、都市名のリスト全体を2 回含む 40 行の SQL クエリだけであるため、可能であればそのようにすることは避けたいと思います。 . そのクエリは、作成と保守が (さらに) 困難になります。

では、各都市の名前がクエリに 1 回だけ表示されるように、この 2 列のクエリを表現する方法はありますか? (都市名の SQL テーブルを作成できることはわかっていますが、可能であればアプリケーションの SQL テーブルのセットを変更したくないので、SQL クエリ自体のみを変更するソリューションを希望します)

4

2 に答える 2