- 締切済み
商品Aと商品Bを購入したユーザーの取得
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- cool_koo1976
- ベストアンサー率50% (40/79)
#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';
- cool_koo1976
- ベストアンサー率50% (40/79)
こんばんは。 テーブル別名を使って、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';
- syntax-error
- ベストアンサー率71% (5/7)
試していませんが、 SELECT DISTINCT ユーザ.id,ユーザ.name FROM ユーザ LEFT JOIN ON (ユーザ.id = 購入履歴.uid) WHERE 購入履歴.item = '商品A' OR 購入履歴.item = '商品B'; でしょうか?
補足
申し訳ありません。説明不足でした。 商品Aと商品B両方を購入しているユーザーのIDを 取得したいのでORではなくANDで検索したいのですが、、 何卒、よろしくお願いいたします。
関連するQ&A
- 顧客と商品ごとに購入日時が最新のデータを取得したい
お世話になります。 以下のテーブル1からサンプル1のようなデータを抽出したいのですが、SQLはどのように書いたらよいでしょうか。 ・顧客と商品ごとに購入日時が最新のデータを取得 ・商品は左側の番号が同じ場合は購入日が最新のデータのみ抽出したい データベースは MySQL5 です。 よろしくお願いいたします。 ●テーブル1 顧客 商品 購入日時 --------------------------------- A 2-2 2014-04-23 08-00-00 A 2-1 2014-04-21 08-00-00 B 2-3 2014-04-20 09-00-00 B 2-2 2014-04-18 06-00-00 B 2-1 2014-04-15 05-00-00 A 1-3 2014-04-12 08-00-00 A 1-2 2014-04-10 04-00-00 C 2-2 2014-04-09 05-00-00 C 2-1 2014-04-08 06-00-00 C 1-2 2014-04-07 08-00-00 C 1-1 2014-04-06 05-00-00 A 1-1 2014-04-05 02-00-00 B 1-2 2014-04-04 02-00-00 B 1-1 2014-04-03 01-00-00 ●サンプル1 顧客 商品 購入日時 --------------------------------- A 2-2 2014-04-23 08-00-00 B 2-3 2014-04-20 09-00-00 A 1-3 2014-04-12 08-00-00 C 2-2 2014-04-09 05-00-00 C 1-2 2014-04-07 08-00-00 B 1-2 2014-04-04 02-00-00
- ベストアンサー
- MySQL
- SELECTで商品AとBを購入した得意先の抽出方法
以下のようなテーブルがある場合に、SELECT文で商品Aと商品Bを両方購入している得意先のレコードを抽出することは可能でしょうか?得意先や商品は以下に限らず複数登録されています。 いい方法がありましたら教えてください。よろしくお願いします。 URIAGE_TBL 得意先 商品 数量 --------------------- 会社1 A 1 <- 抽出 会社1 B 2 <- 抽出 会社1 C 1 <- 抽出 会社2 D 1 会社3 A 2 <- 抽出 会社3 B 1 <- 抽出 会社4 A 2 会社4 C 2
- ベストアンサー
- SQL Server
- MySQL複数テーブルからの情報取得に関しまして
Aテーブル...ユーザ情報 Bテーブル...商品情報(AテーブルのユーザIDを列として持っています) Cテーブル...アイテム情報(Bテーブルの商品IDを列として持っています) Bテーブルの一覧リスト表示の画面にて、検索項目として、 Aテーブルのユーザ名、Cテーブルのアイテム名があります。 現在は、LEFT JOINを使って、検索、呼び出しを行っておりますが、 多数のカラムを指定して呼び出しを行っているため、SQL文が長くなってしまっており、 もっとすっきりとしたSQL文を記述したいと考えております。 ※Aテーブル,Bテーブルの組み合わせは他の画面でもよく使われております。 viewという機能を使うことによって、これをすっきりと記述できるようになるのではないかと考えておりますが、viewはこのような使い方をしてもいいのでしょうか。 または、もっとすっきりとした記述を行う技術のアドバイスをお願いいたします。 よろしくお願いいたします。
- ベストアンサー
- MySQL
- 行と列の入れ替え検索(行は可変で項目を固定にしたい)のSQL文が出来な
行と列の入れ替え検索(行は可変で項目を固定にしたい)のSQL文が出来ない 以下のテーブルがあります。 <テーブルA> UID name --------------- 1 伊藤 2 鈴木 3 高橋 4 佐藤 <テーブルB> no UID key value ------------------- 1 1 telno 001-01-0001 2 1 faxno 001-01-0002 3 1 nickname itochan 4 2 telno 111-11-1111 5 2 faxno 111-11-1112 6 3 nickname hashi この2つのテーブルがあります。 ・テーブルAにあるUIDはテーブルBにない場合もあります。 この場合、以下のように出力して、csvファイルにしたいのですが、可能でしょうか? 申し訳ありませんが、よろしくアドバイスお願いいたします。 UID name telno faxno nickname ------------------------------------------------- 1 伊藤 001-01-0001 001-01-0002 itochan 2 鈴木 111-11-1111 111-11-1112 3 高橋 hashi 4 佐藤 (経緯:wordpressのユーザの一覧(users,usetmetaテーブル)をユーザ一覧としてCSV形式にして保管したいのです。抽出&登録できるプラグインがなかったので)
- ベストアンサー
- MySQL
- 異なるテーブル間の和
テーブルAの属性item1とテーブルBのitem1の和を求めるにはSQLでどのように記述すれば良いのでしょうか?? tableA ------ id item1 item2 pointer tableB ------ id item1 item2 pointer という2つのテーブルで,tableBのpointerはtableAのidを指しています.
- 締切済み
- その他(データベース)
- 一度に関連する他のテーブルの行も取得したい
MySQLバージョン4.1.16を使用しています。 ちょっとPHPも絡んでくるのですが、こちらのジャンルでお願いします。 テーブル「items」はテーブル「users」のuser_idカラムを 外部キーとして持っています。ここで「users」テーブルの行を取得して、 その値(user_idのaaaaやbbbbなど)を利用して 「items」テーブルのそれぞれ対応する行を取得したいのですが、 $users = (usersテーブルの行を取得するSQL文); $index = 0; foreach ($users as $row) { $users[$index]['items'] = (user_idに対応したitemsテーブルの行を取得するSQL文); $index++; } print_r($users); /* Array ( [0] => Array ( [user_id] => aaaa [items] => Array ( [0] => Array ( [user_id] => aaaa [item_name] => アイテム1 ) [1] => Array ( [user_id] => aaaa [item_name] => アイテム2 ) ) ) [1] => Array ( [user_id] => bbbb [items] => Array ( [0] => Array ( [user_id] => bbbb [item_name] => アイテム3 ) ) ) ) */ と、このように2段階に分けてやれば取得できるのですが、 そうではなくてこれを一度に取得できるSQL文というかやり方はあるのでしょうか? $users = (usersテーブルの行を取得するSQL文);←この段階でそれぞれ対応してるitemsテーブルの行まで取得したい
- 締切済み
- MySQL
- サブクエリを使わずに実現したのですが。。。
現在、Mysql 4.0xを利用してDBを構築しています。 しかしながら、サブクエリが使えないため以下のようなクエリが実現できず困っております。 EX: select mg.*,sumlg.* from mg left join (select id,uid from lg where uid = '00001') as sumlg on mg.id = sumlg.id where sumlg.id is null; 上記SQLは特定のユーザーIDの、テーブルBに存在しないテーブルAのIDをユーザー単位で切り分け抽出するSQL文です。 (テーブルBにはIDとUIDでユニークになるレコードが格納されています。) 上記を実現するためのSQLをどなたかアドバイスください。 どうぞよろしくお願いします。
- ベストアンサー
- MySQL
- SQLで日付
MySQLです。JAVAです。 下記に該当するレコード項目全てを抽出するには、 どのようなSQLを書けばよいでしょうか? 指定日 sitei_date = 2015-07-14 sampleテーブル -------------------- ID name date -------------------- 1 商品A 2015-07-07 1 商品A 2015-07-13 1 商品A 2015-07-14 ・・・ これを抽出したい 1 商品A 2015-09-11 2 商品B 2015-09-10 2 商品B 2015-07-15 2 商品B 2015-07-13 3 商品C 2015-07-07 3 商品C 2015-07-11
- ベストアンサー
- MySQL
- SQL Server 縦データを横データに
お世話になります。 下記のテーブルから下記の条件で データを出力するSQL文を作成したいのです。 アドバイスお願い致します。 条件1:NAMEはAを抽出 条件2:ICHIはグループ集計 条件3:ITEMはD2とD3を抽出 TESTテーブル NAME ICHI ITEM DATA ----- ---- ---- ---- A A1 D1 1 A A1 D2 2 A A1 D3 3 A A1 D4 4 A A2 D1 10 A A2 D2 20 A A2 D3 30 A A2 D4 40 B A3 D1 100 B A3 D2 200 B A3 D3 300 B A3 D4 400 データ出力結果 NAME ICHI DATA DATA ----- ---- ---- ---- A A1 2 3 A A2 20 30
- ベストアンサー
- SQL Server
- テーブルの列名をデータとして設定しておき取得する
テーブルが2つあるとします。 テーブルAにはテーブルBの列名がデータとして登録されてます。 テーブルBには値が格納されてます。 テーブルA Key field1 field2 field3 ------------------------------ 1 item2 item3 item5 2 item1 item2 item5 ------------------------------ テーブルB Key item1 item2 item3 item4 item5 -------------------------------------------- 1 101 205 350 420 510 2 111 112 113 114 115 -------------------------------------------- ここでテーブルAとテーブルBへキーを指定して、 テーブルAのfield1~field3に登録されたすべての列名を元にテーブルBから値を取得したいです。 例として キー1を指定して取得すると 205,350,510 が取れます (item2,item3,item5の列名をテーブルAで指定した為) キー2を指定して取得すると 111,112,115 が取れます キーをパラメータとして与え、 できれば2つのテーブルを結合し、1回のSQLで取得する方法はありますでしょうか? (1回のSQLでなくても簡易であれば良いですが) よろしくお願い致します。
- ベストアンサー
- Oracle
お礼
回答ありがとうございます。 投稿した後自分なりにも考えてみたのですが SELECT UID FROM 購入履歴 WHERE 商品名 in ('商品A', '商品B') having count(*) = 2 と言うのを考えてみましたが この方法ですと、商品Aを2度購入したユーザーも 拾えてしまい、要件を満たしませんでした 確かに、今回回答いただいた方法で 商品A、商品B等限定的であれば 一番有効そうではありますが マッチさせたい商品が多くなると検索に 時間がかかりそうでもあります。 とは言え、今回取得したい内容には 十分すぎる回答で、参考になります。 大変ありがとうございます。