
下記のような場合の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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
一つ前に戻るには…
-
テーブル作成時のエラーについ...
-
SQL*LoaderでCSVから指定した列...
-
SELECT 文の NULL列は?
-
Accessでデータシートに同じデ...
-
テーブルリンク リンク元を知...
-
SQLでSUMなどの関数でデータが...
-
会社の飲み会の幹事になり、座...
-
sqlplusで表示が変なので、出力...
-
SQL、2つのテーブルで条件一致...
-
Oracleで上書きImportはできま...
-
ビューのソートについて
-
テーブルに存在しない列をselec...
-
L2SWはARPテーブルを持っている?
-
ACCESS アクセスで他のデータ...
-
update文で改行を入れる
-
飲み会で、座敷orテーブルどち...
-
「テーブルに座って……」という...
-
テーブル名をカラムとして取得...
-
SQLで違うテーブルの値を比較し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
一つ前に戻るには…
-
複数の列にまたがってユニーク...
-
最大値を持つレコードを削除したい
-
mysqlでJOIN文
-
ビューに追加・削除が出来ません。
-
PHP上のSQLで、SELECT文をいく...
-
SQL文による残業時間の算出につ...
-
グループからランダムに抽出す...
-
MySQLでテーブルとビューの区別
-
mysqlの容量について
-
MySQLでデータが存在する日付を...
-
mysqlのフィールド名
-
MySQL INSERT文 エラー
-
外部キー、親を調べるにはshow ...
-
SQL一発でカレンダー表示は可能...
-
1列について重複行を除いて全列...
-
挿入先テーブルに存在しないレ...
-
MySQLのテーブルタイプの変更に...
-
DBの文字コード切り替え
-
mysqlのデータベースを復元した...
おすすめ情報