プロが教えるわが家の防犯対策術!

MySQLで特定の条件のレコードをテーブルから検索するクエリ文がわかりません。
テーブルの構造は以下のとおりとします。

member_id INT
post_no INT
goods_no INT

上記のテーブルから、複数のgoods_noが指定された時(指定されるgoods_noは1個から10個までの間とします)それらの指定された値をすべて含むmember_idとpost_noの組み合わせをすべて検索したいのです。
よろしくお願いします。

A 回答 (2件)

MySQLのバージョンを、少なくともMySQL 4.1、5.0といったレベルまでは最低限提示しましょう。

一見、マイナーチェンジのようであっても、大きな機能拡張、一部の仕様変更があります。
どの列の値で行が一意に識別できるのか、必ず提示しましょう。それによって、SQLがまったく違ったものになることもあります。

提示内容が漠然としているので、具体的なSQLは提示しません。せっかく具体的な提示をしても、条件を後出しされて労力を無駄に消費することが多々ありますから。

要点だけ提示すると、例えば次の2例がすぐに思い浮かびます。

方法1
in条件 + group by + havingのcount関数(distinct指定が要かも)

方法2
商演算

この回答への補足

情報不足だったようですね。すみません。
MySQLのバージョンは、5.0.67です。

テーブルの構造についてもっと正確に記述しましょう。

member_id INT
post_no INT
box_no INT
goods_id INT

各レコードは、member_id + post_no + box_noをキーとして一意に決まります。
最終的に検索したいのは、指定された複数のgoods_id値をすべて持っている
member_id + post_noのすべての組み合わせです。

指定されたgoods_id値がたとえば、100と200だった場合で、、
テーブルが、以下のようだったとします。

member_id, post_no, box_no, goods_id
1 , 1 , 2 , 100
1 , 1 , 5 , 150
1 , 2 , 4 , 200
1 , 2 , 9 , 100
1 , 3 , 3 , 100
1 , 3 , 5 , 150
1 , 3 , 7 , 200
2 , 1 , 2 , 200

この時の正しい検索結果は以下になるはずです。
member_id , post_no
1 , 2
1 , 3

よろしくお願いします。

補足日時:2010/05/22 22:55
    • good
    • 0

こんな感じで、カウントしたユニークな要素数をひろってみてはどうでしょう?



SELECT member_id, post_no
FROM hoge
WHERE goods_id IN (100,200)
GROUP BY member_id, post_no
HAVING COUNT(DISTINCT goods_id)=2
    • good
    • 0
この回答へのお礼

なるほど、シンプルでいいですね。
ありがとうございました。

お礼日時:2010/05/24 15:34

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