商品Aと商品Bを購入したユーザーの取得
こんにちは!
現在以下の状態での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を購入した
ユーザーのみを抽出したいと考えています。
恥ずかしながら見当も付かない状態です。
ポインタだけでも結構ですので
ご教示頂けますようよろしくお願いいたします。
#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等限定的であれば
一番有効そうではありますが
マッチさせたい商品が多くなると検索に
時間がかかりそうでもあります。
とは言え、今回取得したい内容には
十分すぎる回答で、参考になります。
大変ありがとうございます。
こんばんは。
テーブル別名を使って、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';
試していませんが、
SELECT DISTINCT ユーザ.id,ユーザ.name
FROM ユーザ
LEFT JOIN ON (ユーザ.id = 購入履歴.uid)
WHERE 購入履歴.item = '商品A' OR 購入履歴.item = '商品B';
でしょうか?
この回答への補足
申し訳ありません。説明不足でした。
商品Aと商品B両方を購入しているユーザーのIDを
取得したいのでORではなくANDで検索したいのですが、、
何卒、よろしくお願いいたします。
- 最新から表示
- |
- 回答順に表示













