質問: 全て0、1で値を持っているのです。使用しているのはmysqlです。 1.test1,test2,test3という複数カラムの中でいずれか一つのカラムの中に1が含まれているものを絞り込みたいのですがそう言った事はできますでしょうか? 2.逆にbook1,book2という2つのカラムのどちらにも0が含まれていない状態を検出したいのですがこれはnot inで可能でしょうか 下記のような記述を考えていました。 `where (test1,test2,test3) in ('1')` 1は下の1行目3行目がヒットする | test1 | test2 | test3 | | --- | --- | --- | | 1 | 0 | 0 | | 0 | 0 | 0 | | 0 | 1 | 1 | 2は2行目だけヒットする | book1 | book2 | | --- | --- | | 1 | 0 | | 0 | 0 | | 0 | 1 |
回答: 普通にand/orで論理的には実現可能と思いますが...。(他に懸念がある?) そのまんまSQLに落とせば 1.where test1=1 or test2=1 or test3=1 2.where book1!=0 or book2!=0 ※ただ一般的に否定句(!=)やor、in条件は性能が出ない場合があります(項目が少ないのでDBが良きに最適化してくれるかもしれませんが)。 こればチューニングの問題ですが=、and、existsで読み替えるのが定石。 例えば2は値域が0,1であることを利用して where book1=1 and book2=1 あ、ただ過度の最適化はわかりにくくなったり仕様変更に弱かったりするので注意。