私がサポートする 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 クエリ自体のみを変更するソリューションを希望します)