【问题标题】:How to exclude rows in sql server insert statement?如何排除sql server insert语句中的行?
【发布时间】:2017-08-24 17:15:21
【问题描述】:
我有这样的声明
insert into A (id, nid)
(
select id, 100 as nid
from B
group by id
)
这可行,但问题是表 A,在 (id, nid) 上有一个主键约束,并且计算的嵌套查询中的某些行已经存在于表 A 中。如何将它们排除在包含范围之外在嵌套查询中?
谢谢
【问题讨论】:
标签:
sql
sql-server
tsql
insert
【解决方案1】:
你可以使用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:您的选择周围的括号是不必要的
【解决方案3】:
添加 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