• ベストアンサー

データ検索について

<購入予定テーブル> 購入予定年月  注文NO  商品名  個数 <購入実績テーブル> 購入年月日  注文NO  商品名  個数  金額  納品日 このようなテーブルが2つあります。 「年月」と「商品名」を指定すると、 <購入実績テーブル>の購入年月と商品名が一致するデータと <購入予定テーブル>で購入予定年月と商品名が一致し、なお<購入実績テーブル>にないデータ(未購入)のデータ「注文NO、商品名、個数」を一覧表示したいと思っております。 どのようなSQL文にしたらよいのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

情報が足りないと読む方もいろいろ考えないといけないので、それだけ回答が的外れになる可能性が 高くなります。 ・主キーは注文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)

回答No.2

質問に書いてある条件通りに書くと、こんな感じ。 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)) ;

関連するQ&A

専門家に質問してみよう