プロが教える店舗&オフィスのセキュリティ対策術

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

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

A 回答 (4件)

insert into 売上台帳


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

って書けませんでしたっけ。
    • good
    • 0

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

    • good
    • 0

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



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

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

お礼日時:2011/01/20 21:39

>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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!