- ベストアンサー
SQLクエリで複数の検索条件を満たすレコードを取得する方法
- MySQLを使用して複数の検索条件を満たすレコードを取得する方法について質問します。自分の意図通りのクエリを作成することができず困っています。カラムが存在するテーブルから、複数の検索条件のうち3つを満たすレコードを取得したいです。
- 具体的には、6つの条件のうち任意の3つを選択し、それらが該当するレコードを取得したいです。例えば、条件A,B,CのいずれかとD,E,Fのいずれかが該当するレコードを取得したいです。LOTO6でいう5等の結果だけが取得できるようなクエリです。
- 解決策やアドバイスをいただけると助かります。どなたか教えていただけると幸いです。よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
## MySQLの環境ないので、そちらのverで、Case when then end が使えるのか知りませんが。 where Case when col1 = '3' then 1 else 0 end + Case when col2 = '1' then 1 else 0 end + Case when col3 = '0' then 1 else 0 end + Case when col4 = '5' then 1 else 0 end + Case when col5 = '4' then 1 else 0 end + Case when col6 = '2' then 1 else 0 end = 3 で求められるでしょう。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
もしどうしても今のデータの持ち方をしたいのであれば create table hoge(id int,col1 int ,col2 int ,col3 int ,col4 int ,col5 int ,col6 int); insert into hoge values(1,3,1,0,5,4,12),(2,2,5,6,0,1,8); ここで0,1,5に合致するのであればこんな感じ select id from ( select id,col1 as col from hoge union all select id,col2 from hoge union al1 select id,col3 from hoge union all select id,col4 from hoge union all select id,col5 from hoge union all select id,col6 from hoge ) as fuga where col in (0,1,5) group by id having count(*)=3 そもそもが・・・ はっきり言えばデータの持ち方がわるい たとえばcol1とcol2は、優先順位や属性になにか違いがあるのでしょうか? colが同列のデータであればデータは横ではなく縦にもたなくてはいけません 最初からこうもっておけば create table hoge(id int,col int); insert into hoge values (1,3),(1,1),(1,0),(1,5),(1,4),(1,12), (2,2),(2,5),(2,6),(2,0),(2,1),(2,8); これだけで済みます select id from hoge where col in (0,1,5) group by id having count(*)=3 これをidごとに表示するならこんな感じ select id,group_concat(col) from hoge group by id
お礼
詳しい回答ありがとうございます。 データそれぞれに属性をつけている状態ですので、 できればこの配列のまま使いたいのですが、 もう一度データ形式を見直してみます。 ありがとうございます。
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
たとえば6個が1,2,3,4,5,6の場合 SELECT * FROM テーブル名 WHERE CASE WHEN COL1 IN(1,2,3,4,5,6) THEN 1 ELSE 0 END+ CASE WHEN COL2 IN(1,2,3,4,5,6) THEN 1 ELSE 0 END+ CASE WHEN COL3 IN(1,2,3,4,5,6) THEN 1 ELSE 0 END+ CASE WHEN COL4 IN(1,2,3,4,5,6) THEN 1 ELSE 0 END+ CASE WHEN COL5 IN(1,2,3,4,5,6) THEN 1 ELSE 0 END+ CASE WHEN COL6 IN(1,2,3,4,5,6) THEN 1 ELSE 0 END=3 ではどうでしょうか。
お礼
No.1の方と同じような構文の例ですね。 ありがとうざいます。 こちらも試してみようと思います。
お礼
ver 5.0.77 なので恐らくCase when then end は使えると思います。 Caseは使えるというのは知っていたのですが、どういう風に使用すればいいのか分からなかったので 助かります。試してみようと思います。 ありがとうございます。