![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
下記のような場合のSQLがわからなくて困っています
ご回答よろしくお願いします
日単位に買い物リストを作っています
2月1日 タバコ 書籍 ラーメン
2月2日 本 ジュース
2月3日 タバコ ラーメン
2月4日 タバコ
条件1:商品は1万種類以上
条件2:1日の購入商品数は最大100
条件3:抽出条件も最大100
上記の場合でタバコとラーメンを買った日
(2月1日と2月3日)が知りたいのですが
SQLが分かりません
思いついたのが
| Field | Type | Key |
+---------+------+------+
| date | date | PRI |
| syouhin| text | |
+---------+------+------+
このshouhinに商品名または商品IDを連続で書いて
もってこれないかな?と思ったりしましたが
むりそうですよね?・・・
上記のテーブルで抽出結果を更に抽出・抽出・・・・
とすれば可能ですが、条件にも書いたとおり
抽出対象の商品が最大100になります
このような条件で抽出(SQL発行数は少なくして)するにはどうすればいいのでしょうか?
よろしくお願いします
No.4ベストアンサー
- 回答日時:
普通はこうしませんか?
kaimonoテーブル
id date syouhin
1 2006-02-01 タバコ
2 2006-02-01 書籍
3 2006-02-01 ラーメン
4 2006-02-02 本
5 2006-02-02 ジュース
6 2006-02-03 タバコ
7 2006-02-03 ラーメン
8 2006-02-04 タバコ
※idはauto_incrementで十分。
そこで、日付テーブルを用意してinner joinしていく
という流れ。日付テーブルをあえて用意しないので
あればtemporaryつかう手もあります。
sql文は長いですが、PHPなどプログラムで制御すれば
問い合わせは少ないのでスピードは速いとおもいます。
create temporary table `date_table` select distinct `date` from `kaimono`;
select * from `date_table`
inner join `kaimono` as `k1` on `date_table`.`date`=`k1`.`date` and `k1`.`syouhin`='タバコ'
inner join `kaimono` as `k2` on `date_table`.`date`=`k2`.`date` and `k2`.`syouhin`='ラーメン'
この回答への補足
いま、mysqlが使えないので明日テストしてみます
私の質問の仕方がわるかったのですが、
2006-02-04はHITさせたくありません
タバコとラーメンを買った日(02-01と02-03だけ)HITさせたいです
inner join勉強します
まるまる写して実行してみました
2/1と2/3がきれいに抽出されていました
ありがとうございます
まさに、求めていた回答および結果でした
inner join勉強します
ありがとうございました
No.3
- 回答日時:
ちょっと間違えました。
select date from table where syouhin like '%タバコ%' or syouhin like '%ラーメン%'
ですね
No.2
- 回答日時:
んーと、テーブルの作りがあまり良くないとは思いますが、
とりあえず、結果を出すのであれば
select date from table where syouhin like '%タバコ%' or '%ラーメン%' で出せると思います。
ですが、質問のようにsyouhinフィールドに商品名を
列挙するのであれば、データが増えるに連れて
結果が出るのが遅くなるはずなので、
私ならテーブルの設計を変えます。
この回答への補足
accessで
SELECT date FROM table
WHERE syouhin Like "*タバコ*ラーメン*";
としてみました
Paul_xxxさんのSQLと同じことですよね?
なるほど・・・たしかにHITしますね
ありがとうございました!
ご回答ありがとうございます
早速ためします
(ちょっと、風呂入ってきます・・・)
ちなみに、テーブル設計はどのように変えるのでしょうか?
No.1
- 回答日時:
MySQLは触ったことがありませんが、、、
Select Distinct(date) From table
Where syouhin = 'タバコ' or syouhin = 'ラーメン' ;
でどうでしょうか?
商品がたくさんあるのなら、
Where syouhin in ('タバコ', 'ラーメン',・・・)
とすればよいのでは・・・。f^_^;
この回答への補足
やってみました
テーブルは
dateフィールドと
syouhinフィールドで
ともにKEYにしました
datesyouhin
02-01タバコ
02-01ラーメン
02-01書籍
02-02ジュース
02-02本
02-03タバコ
02-03ラーメン
02-04タバコ
こんな感じです
SELECT DISTINCT date
FROM kaimono
WHERE (syouhin="タバコ") OR (syouhin="ラーメン");
の結果は
02-01
02-03
02-04
でした・・・
02-04はタバコだけなので、HITさせたくないのです
もちょっと考えます
(テストはaccess使いました)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- Oracle 列1と列2の関係性で列3の条件に一致するレコードを抽出したい 1 2022/04/13 07:46
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- SQL Server SQLのクエリの書き方 1 2022/03/29 23:06
- Excel(エクセル) VBAで同フォルダ内の別ブックを開かず参照して条件の一致する行の指定セルを抽出するには? 1 2022/07/21 19:29
- Access(アクセス) accessの日付フィールドから前年度だけを取り出したい 3 2022/04/13 23:13
- PHP PHP MySql ページング 2 2022/09/20 06:38
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQLのテーブルタイプの変更に...
-
一つ前に戻るには…
-
SQLで漢字名称を都道府県や市区...
-
まるいテーブル 円い 丸い 漢字...
-
オフ会の席替えについて(8人...
-
SQLあってますか?こう?
-
お金持ちのテーブル
-
【PHP】SQL文のSUM関数で出力し...
-
男性と2人で飲食店に行きテーブ...
-
L2SWはARPテーブルを持っている?
-
処理の途中で停止させ、再開さ...
-
【エクセル】データテーブルの...
-
少人数披露宴のテーブル
-
SQL 外部結合
-
妹が、メルカリで売れた商品を...
-
SQL文の結合(一対多)がわから...
-
複数のテーブルを参照するselec...
-
外部結合について
-
木のテーブルの輪染みが取れず...
-
ピグライフ、パーティーテーブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
一つ前に戻るには…
-
ビューに追加・削除が出来ません。
-
最大値を持つレコードを削除したい
-
mysqlでJOIN文
-
SQL文による残業時間の算出につ...
-
mysqlのフィールド名
-
SQL一発でカレンダー表示は可能...
-
副問い合わせの限界値はどれく...
-
1列について重複行を除いて全列...
-
矛盾していないでしょうか?
-
mysqlで外部キーをつけたカラム...
-
MySQLのFOREIGN KEYについて
-
SQLを教えてください
-
MySQLのテーブル設計について
-
PHP上のSQLで、SELECT文をいく...
-
【ストアドプロシージャ】条件...
-
char型データ 固定長のままでs...
-
プログラミングについて
-
他のDBにあるテーブル内容をcre...
-
売上管理
おすすめ情報