MYSQLで質問です。

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

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

回答(3件)

id:jranar No.1

くろふね回答回数98ベストアンサー獲得回数292012/03/06 10:24:58スマートフォンから投稿

ポイント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

y-kawaz回答回数1421ベストアンサー獲得回数2262012/03/06 12:05:51

ポイント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ベストアンサー獲得回数212012/03/06 12:08:46

ポイント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

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

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

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

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

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