- ベストアンサー
MySQLで特定の条件のレコードをテーブルから検索するクエリ文がわかり
MySQLで特定の条件のレコードをテーブルから検索するクエリ文がわかりません。 テーブルの構造は以下のとおりとします。 member_id INT post_no INT goods_no INT 上記のテーブルから、複数のgoods_noが指定された時(指定されるgoods_noは1個から10個までの間とします)それらの指定された値をすべて含むmember_idとpost_noの組み合わせをすべて検索したいのです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じで、カウントしたユニークな要素数をひろってみてはどうでしょう? 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
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
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 よろしくお願いします。
お礼
なるほど、シンプルでいいですね。 ありがとうございました。