MYSQLで質問です。

ユーザーの購入履歴から、あるアイテムを持っていないユーザーを抽出したいのですが、良い方法はありますでしょうか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/03/13 10:10:07
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:jranar No.1

回答回数98ベストアンサー獲得回数29スマートフォンから投稿

ポイント34pt

スマフォからなのでサンプルは出せませんが、not exsistを調べれば答えが出てくると思います。

id:jranar

一応家に帰って来ましたので書きますと、

ユーザテーブル(ユーザID,ユーザ名)ユーザの情報
購入履歴テーブル(連番,ユーザID,商品ID)購入履歴の情報

というテーブルがあった場合

SELECT
A.ユーザID
,A.ユーザ名
FROM
ユーザテーブル A
WHERE
NOT EXISTS (
SELECT
'x'
FROM
購入履歴テーブル B
WHERE
A.ユーザID = B.ユーザID
AND B.商品ID = 'ターゲットの商品ID'
)
ORDER BY
ユーザID ASC;

という感じで「ターゲットの商品ID」に対象の商品IDを入れると購入してないユーザが表示されます。

2012/03/06 22:24:06
id:y-kawaz No.2

回答回数1422ベストアンサー獲得回数226

ポイント33pt

情報が少ないですが一般的な構成で以下のようなテーブルがあったと仮定します。

  • users(id,name)
  • items(id,name)
  • history(user_id,item_id)

例えばitem_idが123の商品を購入していないユーザを取得するなら↓こんなSQLでいいと思います。

SELECT * FROM users WHERE id NOT IN (SELECT user_id FROM history WHERE item_id=123);
id:mario-16 No.3

回答回数219ベストアンサー獲得回数21

ポイント33pt

このような形のSQLになります。

SELECT USER_NAME FROM BUYING_HISTORY
    WHERE NOT EXISTS (SELECT * FROM BUYING_HISTORY WHERE ITEM = '○○○○')

NOT EXISTSに続く副問い合わせの検索結果が行を返せばWHERE句の判定が偽になります。

以下はMYSQLのマニュアルの該当部分のリンクです。ご確認ください。
http://dev.mysql.com/doc/refman/5.1/ja/exists-and-not-exists-subqueries.html

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

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

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

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

回答リクエストを送信したユーザーはいません