なかなかどうして、この有様よ。

へたれ系PG/SEの技術系メモ+育児日記。

SQLで対象のカラムのデータが複数のカラムのデータのいずれかに含まれている場合

ざっくり概要(ざっくり)

最近、SQLを書いていて「とあるマスタテーブルにあるカラムのデータが、とあるトランザクションテーブルにある複数のカラムのうちどこかに含まれている場合は対象にする」というSQLを書く機会があったので、メモとして残しておきます。

「めんどくさい」のは簡潔にしたい

この業界に入って久しいですが、SQLを極めるほどSQL文を書くということはほとんどなかったので、今回のSQLトランザクションテーブルの複数カラムを単純に「Where句にORで全てのカラムを書く」という方法を考えました。
しかし、複数カラムが実は10カラムあったので、それは大変「めんどくさい」ですし、「ORで全てのカラムをバカ正直に条件に書くのはなんかミスりそうでやだなー」という結論に至ったので、いろいろ調べてみたのでした。

そして、こちらの内容を見つけました。
MySQL - sqlで複数のカラムのデータにいずれかを含んでいる状態|teratail
上記の内容を確認すると、SQLでINで条件を設定する際に、対象の複数カラムを設定すればそれを対象として条件検索してくれるということでした。

SQL

以下の構造のテーブルがあったとします。
マスタテーブル(MST_TABLE)にはカラムはID、ITEM_CDとその他カラムがあり、トランザクションテーブル(TRN_TABLE)にはID、ITEM_CD1からITEM_CD10までの連番カラムとその他のカラムがある前提です。

SQL文としては以下になります。

Select 
    T.ID
From 
    MST_TABLE M
  , TRN_TABLE T
Where 
    M.ITEM_CD IN (
           T.ITEM_CD1
          , T.ITEM_CD2
          , T.ITEM_CD3
          , T.ITEM_CD4
          , T.ITEM_CD5
          , T.ITEM_CD6
          , T.ITEM_CD7
          , T.ITEM_CD8
          , T.ITEM_CD9
          , T.ITEM_CD10
        );

これで、SQLで対象のカラムのデータが複数のカラムのデータのいずれかに含まれている場合のデータを取得することができます。