質問: 質問を見てくださってありがとうございます。 MySQL環境下において、以下のようなデータがあるとします。 ID | n1 | n2 | n3 | n4 | n5 | n6 | n7 | n8 165| 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 検索する数字は以下の通りとします。 '5', '7', '11', '9', '4' IN句でやろうと思ったのですが、存在しないカラムもあるため ``` SELECT id FROM mst_nin_s8 WHERE n1 IN ('5', '7', '11', '9', '4') AND n2 IN ('5', '7', '11', '9', '4') AND n3 IN ('5', '7', '11', '9', '4') AND n4 IN ('5', '7', '11', '9', '4') AND n5 IN ('5', '7', '11', '9', '4') AND n6 IN ('5', '7', '11', '9', '4') AND n7 IN ('5', '7', '11', '9', '4') AND n8 IN ('5', '7', '11', '9', '4') ``` のようなクエリでは、結果が0件となってしまいます。 トリッキーな考え方が必要かと思うのですが、思い浮かびませんでしたので、質問させていただきます。 SQL1発でIDを取得する方法はないでしょうか。 -------更新 >検索する数字 '5', '7', '11', '9', '4' がn1〜n8のいずれかにすべて含まれているレコードを探したいということですか? その通りです。
回答: 要件が曖昧ですが、たぶん軸を逆にすればいいのではないかと ``` SELECT id FROM mst_nin_s8 WHERE '5' IN (n1,n2,n3,n4,n5,n6,n7,n8) AND '7' IN (n1,n2,n3,n4,n5,n6,n7,n8) AND '11' IN (n1,n2,n3,n4,n5,n6,n7,n8) AND '9' IN (n1,n2,n3,n4,n5,n6,n7,n8) AND '4' IN (n1,n2,n3,n4,n5,n6,n7,n8) ```