アプリ版:「スタンプのみでお礼する」機能のリリースについて

具体的には以下のテーブルがあるとします。

コード1    コード2
--------------------
 001      A001
 001      B001
 001      C001
 002      A001
 002      B002
 002      C001


そして、コード2がA001とB001を持ったコード1を抽出したいのです。
結果としては

コード1 
-------
 001  

となりたいんです。

条件で単に コード2=A001 AND コード2=B001 と書いただけでは無理でした。

もし、ORだったら仮に重複を省いても

コード1  
---------
 001  
 002  

となって、002はB001がないにもかかわらず選ばれてしまうので意味がありません。

最終的には
コード2 IN (A001,A003) AND コード2 IN (C001, C002)のような条件にするのですが
上記の段階で上手く行ってないので質問させて頂きました。

A 回答 (4件)

>Aという項目でユーザーが何個チェックをして、Bという項目で何個チェックするかは毎回変わると思うのです。



だから・・・
ユーザーがチェックした数をカウントするだけじゃないの?
それができないなら、ユーザーの要求でデータの絞り込みなんてできないでしょ
    • good
    • 0
この回答へのお礼

回答ありがとうございます。おかげさまで教えて頂いた方法を利用して作ることができました。お手数をお掛けしました。

お礼日時:2012/06/18 15:08

>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;
    • good
    • 0
この回答へのお礼

ご回答頂きありがとうございます。

今作っているのはWEBページの詳細な検索処理で、項目でチェックボックスを使っています。いくつかチェックボックスを用いた項目はありますが、実際のデータは一つのテーブルでサンプルのような形で2つしか項目はありません。

Aという項目のデータがA001やA002に辺り、Bという項目のデータがB001、B002になります。

なので、Aという項目でユーザーが何個チェックをして、Bという項目で何個チェックするかは毎回変わると思うのです。

すでにあるテーブルをそのまま使って実現させたいのでわざわざcreateでテーブルを作ってやろうとはしたくないのですが無理でしょうか?

お礼日時:2012/06/14 17:50

SELECT コード1


FROM テーブル名
WHERE コード2 IN('A001','B001')
GROUP BY コード1
HAVING COUNT(*)=2
ORDER BY 1
です。
    • good
    • 0
この回答へのお礼

ご回答頂きありがとうございます。
A No.1の方にも書きましたが
今回参考例として2つ同時としているだけで、最終的に作りたいものは何個になるか分からないものなので。

詳細検索の受け側の処理で、ユーザー側が何項目条件を設定するか分からないため、having count(*) =2の2の部分は毎回可変します。

お礼日時:2012/06/14 14:57

コード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
    • good
    • 0
この回答へのお礼

ご回答頂きありがとうございます。
ただ、参考例では2つ同時としているのですが最終的に作りたいものは何個になるか分からないものなので。ユーザー側が何個設定するか分からないため、having count(*) =2の2の部分は毎回可変します。

お礼日時:2012/06/14 14:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!