2017-08-24 3 views
3

私はこのSQL Serverのinsert文の行を除外する方法は?

insert into A (id, nid) 
(
    select id, 100 as nid 
    from B 
    group by id 
) 

これは動作しますが、問題は、テーブルAである、(ID、NID)に主キー制約があり、計算されたネストされたクエリの行の一部、すでに存在しているような文を持っていますどのようにそれらをネストされたクエリに含めることを除外できますか?

おかげ

+0

マージステートメントを使用して一致を無視する – SMor

答えて

4

あなたはEXCEPTを使用することができます。

insert into A (id, nid) 
select id, 100 as nid 
from B 
group by id 
EXCEPT 
SELECT id, nid 
FROM A; 
2

行が存在する場合だけ確認...

insert into A (id, nid) 
select id, 100 as nid 
from B 
WHERE NOT EXISTS (SELECT * FROM A WHERE A.id = B.id AND A.nid = 100) 
group by id 

PS:あなたの選択の周りに括弧が

1

不要です追加Where句:

insert A (id, nid) 
select id, 100 as nid 
from B 
Where Not exists (Select * from A 
        Where id = B.Id 
        and nid = 100) 
group by id 
関連する問題