きり丸の技術日記

技術検証したり、資格等をここに残していきます。

SQLで複合したキーの検索条件でIN句検索する(複合、複数の組み合わせで条件検索)

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」でもヒットしませんでした。

基本構文ではありますが、まったく欲しい情報にヒットしないので困りますね。たまにしか使わないので、困りました。

参考情報