- ベストアンサー
データ検索について
<購入予定テーブル> 購入予定年月 注文NO 商品名 個数 <購入実績テーブル> 購入年月日 注文NO 商品名 個数 金額 納品日 このようなテーブルが2つあります。 「年月」と「商品名」を指定すると、 <購入実績テーブル>の購入年月と商品名が一致するデータと <購入予定テーブル>で購入予定年月と商品名が一致し、なお<購入実績テーブル>にないデータ(未購入)のデータ「注文NO、商品名、個数」を一覧表示したいと思っております。 どのようなSQL文にしたらよいのでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
情報が足りないと読む方もいろいろ考えないといけないので、それだけ回答が的外れになる可能性が 高くなります。 ・主キーは注文NOだけ?それとも年月との複合キー?商品名との複合キー? ・予定した月と違う月に買った場合や、予定した個数のうち一部だけしか買っていない場合でも、 この表示方法でよいのか? ・購入年月日、購入予定年月のデータ型は何? 一番シンプルに ・主キーは注文NOのみ ・買うときは常に予定した月に予定した個数を買う ・購入年月日はCHAR(8)、購入予定年月はCHAR(6)とすれば、 以下のようなクエリになりますが、前提が違っていたら応用していただくか、より具体的に示していただくしかないです。 SELECT 注文NO,商品名,個数 FROM 購入実績テーブル WHERE 購入年月日 LIKE &年月 || '%' AND 商品名=&商品名 UNION ALL SELECT 注文NO,商品名,個数 FROM 購入予定テーブル WHERE 購入予定年月=&年月 AND 商品名=&商品名 AND 注文NO NOT IN (SELECT 注文NO FROM 購入実績テーブル)
その他の回答 (1)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
質問に書いてある条件通りに書くと、こんな感じ。 SELECT 注文NO,商品名,個数 FROM 購入実績テーブル WHERE 購入年月日 LIKE &年月 || '%' AND 商品名=&商品名 UNION ALL SELECT 注文NO,商品名,個数 FROM 購入予定テーブル a WHERE 購入予定年月=&年月 AND 商品名=&商品名 AND not exists (select 1 from 購入実績テーブル b where a.商品名=b.商品名 and a.購入予定年月=substr(b.購入年月日,1,6)) ;