MySQLで質問です。

顧客テーブル user (id,name) と 履歴テーブル order (order_id,user_id,syouhin_id, ~) が存在します。
履歴テーブルには1行にsyouhin_id が1つしか登録されません。
(1回の取引で1つの注文のみです。)
ユーザーの購入履歴の処理で詰まっているのですが
Aという商品とBという商品を「両方」買ったユーザー の抽出方法がいまいち考えられません。

syouhin_id の or ではなく and になると思うのですが構造上そうではないですし(汗

宜しくお願い致します。

回答の条件
  • 1人10回まで
  • 13歳以上
  • 登録:2012/07/27 09:33:49
  • 終了:2012/08/03 09:35:03

ベストアンサー

id:wakwak_koba No.1

こばさん回答回数97ベストアンサー獲得回数132012/07/27 11:32:51

ポイント167pt

select *
from user
where id in (select user_id from order where syouhin_id=A)
 and id in (select user_id from order where syouhin_id=B)

id:inunekoneko

ありがとう御座います。
一番最初にご回答いただいたのでBAとさせて頂きます。
望んでいた動作が実現できました。

2012/08/03 12:06:33

その他の回答(2件)

id:wakwak_koba No.1

こばさん回答回数97ベストアンサー獲得回数132012/07/27 11:32:51ここでベストアンサー

ポイント167pt

select *
from user
where id in (select user_id from order where syouhin_id=A)
 and id in (select user_id from order where syouhin_id=B)

id:inunekoneko

ありがとう御座います。
一番最初にご回答いただいたのでBAとさせて頂きます。
望んでいた動作が実現できました。

2012/08/03 12:06:33
id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492012/07/28 02:38:15

ポイント167pt

簡単な記述で応用の効く例

SELECT a.*
FROM `user` a
WHERE EXISTS(SELECT * FROM `order` b WHERE b.user_id = a.id AND b.syouhin_id = A LIMIT 1)
    AND EXISTS(SELECT * FROM `order` b WHERE b.user_id = a.id AND b.syouhin_id = B LIMIT 1)
;

動作速度面で少し有利な例

SELECT a.*
FROM `user` a
    LEFT JOIN `order` b1 ON b1.user_id = a.id AND b1.syouhin_id = A
    LEFT JOIN `order` b2 ON b2.user_id = a.id AND b2.syouhin_id = B
WHERE b1.order_id IS NOT NULL
    AND b2.order_id IS NOT NULL
;

お暇な時に以下参照
http://dev.mysql.com/doc/refman/5.1/ja/optimizing-subqueries.html

id:inunekoneko

ありがとう御座います。
参考にさせていただきます。

2012/08/03 12:07:01
id:oil999 No.3

oil999回答回数1728ベストアンサー獲得回数3202012/07/28 15:42:38

ポイント166pt
SELECT * FROM user
WHERE id in (SELECT user_id FROM ORDER WHERE syouhin_id=A)
AND id IN (SELECT user_id FROM ORDER WHERE syouhin_id=B);
id:inunekoneko

ありがとう御座います。
参考にさせていただきます。

2012/08/03 12:07:08

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません