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

以下のようなSQL文があった場合

SELECT table_a.* FROM table_a LEFT JOIN table_b ON (table_a.id = table_b.aid)

これでtable_bを連結したtable_aができると思いますが、table_bのフィールドは

id , aid, value

となっていた場合、valueが「1」かつ「2」のデータを検索する場合は、どのようにWHERE句を書けばいいのでしょうか。

WHERE (table_b.value = '1' AND table_b.value = '2')

ではうまく取得出来ませんでした。

お分かりの方、よろしくお願いします。

A 回答 (2件)

>valueが「1」かつ「2」のデータを検索する


この命題では日本語としてなりたたない
なんとなく言いたいことはわかるのだけど条件提示が杜撰すぎ

以下のどれかだと推測します

(1)valueが1および2を含むデータをすべて抽出
→仮に別途value=3のデータがあたったらそれも抽出

(2)valueが1および2を含むデータの内、1,2に該当するデータのみ抽出
→仮に別途value=3のデータがあってもむし

(3)valueが1および2しかないデータを抽出
→仮に別途value=3のデータがあったら1,2に合致しても抽出しない

たぶん(2)なんだろうなぁということで以下

//元データ
create table table_a (id int,data varchar(20));
insert into table_a values(1,'a1'),(2,'a2'),(3,'a3');
create table table_b (id int,aid int,value int);
insert into table_b values(1,1,1),(2,1,2),(3,1,3),(4,2,1),(5,2,2),(6,3,1),(6,3,3);

//単純な表示
SELECT * FROM table_a
WHERE table_a.id in (SELECT aid FROM table_b
where value in (1,2)
group by aid
having count(distinct value)=2
)

//table_bの情報も含めた表示
SELECT * FROM table_a
INNER JOIN table_b ON table_a.id = table_b.aid
and value in (1,2)
WHERE table_a.id in (SELECT aid FROM table_b
where value in (1,2)
group by aid
having count(distinct value)=2
)
    • good
    • 0
この回答へのお礼

杜撰な説明にも関わらず意図をくみ取っていただき有難うございます。

まさしく仰るとおり(2)で、しかも単純な表示の方でOKです。
やりたいことはぼんやりわかるのですが、それをSQLで表現するのが、自分はまだまだ未熟だと実感します。
こうして提示していただき、ひとつひとつかみ砕いて理解していき、最終的に思うとおりの結果に繋がりました。

本当に有難うございました!

お礼日時:2013/11/28 15:44

> valueが「1」かつ「2」のデータを検索する場合は、どのようにWHERE句を書けばいいのでしょうか。


これでは車屋さんに行って、「ATかつMTの車を探してください」と言っているのと同じです。
valueには1つの値しか入りませんので、「valueが1かつ2」という状態はあり得ません。

検索条件を一度よく整理してみてください。

この回答への補足

少し説明が足りなかったようです。申し訳ありません。

table_bにaidが同一で、valueが違うデータが複数件挿入されています。
aidが同一で、valueが「1」と「2」のレコードを持つデータの情報をtable_aから抜き出したいということなのです。

補足日時:2013/11/28 15:40
    • good
    • 0

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