新しく質問する

商品Aと商品Bを購入したユーザーの取得

役に立った:2件
  • 質問者:damemon
  • 投稿日時:2005/04/11 17:51
  • 困り度:暇なときに回答をください

こんにちは!

現在以下の状態でのsql作成に悩んでいます。

テーブルユーザー
uid name
1 test1
2 test2
3 test3

購入履歴
id uid item
1 1 商品A
2 1 商品B
3 2 商品B
4 3 商品A
5 3 商品C

の様なテーブルから商品Aと商品Bを購入した
ユーザーのみを抽出したいと考えています。
恥ずかしながら見当も付かない状態です。
ポインタだけでも結構ですので
ご教示頂けますようよろしくお願いいたします。

この質問に回答する
このQ&Aは役に立ちましたか?(役に立った:2件)

回答(3件)

  • 参考になった:0件

#2です。
ごめんなさい。結合条件が抜けてました。
SQLを訂正します。

SELECT テーブルユーザー.uid, テーブルユーザー.name
FROM テーブルユーザー, 購入履歴 AS Hist_A, 購入履歴 AS Hist_B
WHERE テーブルユーザー.uid = Hist_A.uid
AND テーブルユーザー.uid = Hist_B.uid
AND Hist_A.item = '商品A' AND Hist_B.item = '商品B';

通報する

この回答へのお礼

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

投稿した後自分なりにも考えてみたのですが
SELECT UID FROM 購入履歴
WHERE 商品名 in ('商品A', '商品B')
having count(*) = 2

と言うのを考えてみましたが
この方法ですと、商品Aを2度購入したユーザーも
拾えてしまい、要件を満たしませんでした

確かに、今回回答いただいた方法で
商品A、商品B等限定的であれば
一番有効そうではありますが
マッチさせたい商品が多くなると検索に
時間がかかりそうでもあります。

とは言え、今回取得したい内容には
十分すぎる回答で、参考になります。

大変ありがとうございます。

  • 参考になった:0件

こんばんは。

テーブル別名を使って、SQL上「購入履歴」テーブルを2つ用意し、
一方で"商品A"を持つレコードを、もう一方で"商品B"を持つレコードを検索すれば
目的の結果を抽出できると思います。


【例】
SELECT DISTINCT テーブルユーザー.uid, テーブルユーザー.name
FROM テーブルユーザー, 購入履歴 AS Hist_A, 購入履歴 AS Hist_B
WHERE Hist_A.item = '商品A' AND Hist_B.item = '商品B';

通報する

  • 参考になった:0件

試していませんが、

SELECT DISTINCT ユーザ.id,ユーザ.name
FROM ユーザ
LEFT JOIN ON (ユーザ.id = 購入履歴.uid)
WHERE 購入履歴.item = '商品A' OR 購入履歴.item = '商品B';

でしょうか?

通報する

この回答への補足

申し訳ありません。説明不足でした。

商品Aと商品B両方を購入しているユーザーのIDを
取得したいのでORではなくANDで検索したいのですが、、
何卒、よろしくお願いいたします。

  
このQ&Aは役に立ちましたか?(役に立った:2件)

このページのトップへ