こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

インサート文での条件の指定について

お世話になります。
SQL初心者です。
ストアドを作成しているのですが、その中の下記の様なインサート分で、
条件を、インサートされる側の売上台帳テーブルにT受信データの受注Noが
ない行のみをインサートさせたいと思っているのですが、どうやって記述
して良いかわからず悩んでいます。
どなたかご親切な方、ご教授下さいます様、宜しくお願い致します。
  
         記

insert into 売上台帳
(支店コード,受注No,伝票No,品番,品名,数量,オーダー宛先,売上日,
住所,電話番号,更新日時,更新者)
select支店コード,受注No,伝票No,品番,品名,数量,オーダー宛先,売上日,
住所,電話番号,更新日時,更新者
from T受信データ
where 支店コード = 002
;

投稿日時 - 2011-01-03 12:01:13

QNo.6422321

困ってます

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

insert into 売上台帳
(支店コード,受注No,伝票No,品番,品名,数量,オーダー宛先,売上日,
住所,電話番号,更新日時,更新者)
select支店コード,受注No,伝票No,品番,品名,数量,オーダー宛先,売上日,
住所,電話番号,更新日時,更新者
from T受信データ
where 支店コード = 002
and not exists ( select 1
from 売上台帳 U
where T受信データ.受注No=U.受注No)

って書けませんでしたっけ。

投稿日時 - 2011-01-03 18:07:46

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

MERGE文を使って、NOT MATCHでINSERTして、MATCHで何もしない。

投稿日時 - 2011-01-03 17:08:49

ANo.2

「売上台帳テーブルにT受信データの受注Noがない行」という条件は EXIST 句を使っても表現できますね。

例) -------------------------------------
-- from 句より前は元と同じ
from T受信データ A
where
支店コード = 002 AND
NOT EXISTS(SELECT * FROM 売上台帳 B WHERE A.受注No = B.受注No);
-----------------------------------------

投稿日時 - 2011-01-03 15:04:36

お礼

大変参考になりました。
有難うございました。

投稿日時 - 2011-01-20 21:39:18

ANo.1

>from T受信データ
>where 支店コード = 002

from T受信データ A left outer join 売上台帳 B
on A.受注No=B.受注No
where A.支店コード='002' AND B.受注No IS NULL

支店コードは文字列ではないですか?
文字列なら引用符(アポストロフィ)で囲む必要が
あります。また、受注NoがNullのデータは無いと
仮定しています。正確を期するなら、下記のように
主キー項目を使います。
B.主キー IS NULL

投稿日時 - 2011-01-03 12:58:19

あなたにオススメの質問