- ベストアンサー
一つの項目に2つのデータが含まれるものを抽出
- 特定の条件に基づいて、ある項目に2つのデータが含まれるものを抽出する方法について質問です。
- 具体的には、以下のテーブルにおいて、コード2がA001とB001を持つコード1を抽出したいです。
- 条件を単純にコード2=A001 AND コード2=B001とするだけではうまくいかないため、どのような条件を設定すれば良いか教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>Aという項目でユーザーが何個チェックをして、Bという項目で何個チェックするかは毎回変わると思うのです。 だから・・・ ユーザーがチェックした数をカウントするだけじゃないの? それができないなら、ユーザーの要求でデータの絞り込みなんてできないでしょ
その他の回答 (3)
- yambejp
- ベストアンサー率51% (3827/7415)
>having count(*) =2の2の部分は毎回可変します。 WEBかなにかからデータとるんですよね? だったら何個とんできているかなんかすぐわかるでしょう? どうしてもその部分もSQLで処理したいなら テンポラリテーブルに投入して、変数で受けるなどの処理になるでしょう //元データはそのままだとして・・・ create temporary table temp(code2 varchar(10) unique key); insert ignore into temp(code2) values('A001'),('B001'); //ヒットさせたいデータをテンポラリに投げておく select @count:=count(*) from temp; select code1 from hoge inner join temp using(code2) group by code1 having count(*)=@count;
お礼
ご回答頂きありがとうございます。 今作っているのはWEBページの詳細な検索処理で、項目でチェックボックスを使っています。いくつかチェックボックスを用いた項目はありますが、実際のデータは一つのテーブルでサンプルのような形で2つしか項目はありません。 Aという項目のデータがA001やA002に辺り、Bという項目のデータがB001、B002になります。 なので、Aという項目でユーザーが何個チェックをして、Bという項目で何個チェックするかは毎回変わると思うのです。 すでにあるテーブルをそのまま使って実現させたいのでわざわざcreateでテーブルを作ってやろうとはしたくないのですが無理でしょうか?
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
SELECT コード1 FROM テーブル名 WHERE コード2 IN('A001','B001') GROUP BY コード1 HAVING COUNT(*)=2 ORDER BY 1 です。
お礼
ご回答頂きありがとうございます。 A No.1の方にも書きましたが 今回参考例として2つ同時としているだけで、最終的に作りたいものは何個になるか分からないものなので。 詳細検索の受け側の処理で、ユーザー側が何項目条件を設定するか分からないため、having count(*) =2の2の部分は毎回可変します。
- yambejp
- ベストアンサー率51% (3827/7415)
コード1とコード2の組合せがユニークであれば単純 (ユニークではない場合はちょっと工夫が必要なので今回は略) create table hoge(code1 varchar(10),code2 varchar(10),unique key(code1,code2)); insert into hoge values( '001','A001'),( '001','B001'),( '001','C001'),( '002','A001'),( '002','B002'),( '002','C001'); //表示 select code1 from hoge where code2 in('A001','B001') group by code1 having count(*) =2
お礼
ご回答頂きありがとうございます。 ただ、参考例では2つ同時としているのですが最終的に作りたいものは何個になるか分からないものなので。ユーザー側が何個設定するか分からないため、having count(*) =2の2の部分は毎回可変します。
お礼
回答ありがとうございます。おかげさまで教えて頂いた方法を利用して作ることができました。お手数をお掛けしました。