1組の乱太郎、2組のきり丸、3組のしんべヱの情報が欲しい、といった組と名前の両方をキーにした検索をしたい時があります。
この記事では、単純にANDで結合できず、複数の条件を組み合わせた複合でのキーを検索条件として実行する方法を記載します。
環境
- MySQL
- PostgreSQL
全DBでは確認していないので、ローカルDBでの動作確認をお願いします。
対応
次のどちらかで対応できます。
-- シンプル (?, ?) IN ((?, ?), (?, ?)) -- AND と ORを組み合わせる ((? AND ?) OR (? AND ?))
具体的には次のSQLとなります。
WHERE (組, 名前) IN (('1', '乱太郎'), ('2', 'きり丸'), ('3', 'しんべヱ')) WHERE ((組='1' AND 名前='乱太郎') OR (組='2' AND 名前='きり丸') OR (組='3', 名前='しんべヱ'))
複合条件を増やす場合も、同じように(?, ?, ?)
とカンマの数を増やすだけで対応できます。
終わりに
「複数条件 SQL」等々で検索すると、基本的なAND, ORを使用して直列に複数の検索条件を加える方法しか出てきませんでした。こういう並列条件を並べたいときはどのようなキーワードで検索すればよかったんですかね…。ちなみに、「複合条件 SQL」でもヒットしませんでした。
基本構文ではありますが、まったく欲しい情報にヒットしないので困りますね。たまにしか使わないので、困りました。
参考情報
twitter.com(a,b)in ((?,?),(?,?)...)で行けんかったったっけ
— ながた (@dogesen) 2022年10月23日- https://www.ibm.com/docs/ja/i/7.2?topic=conditions-multiple-search-within-where-clause