SQL - 将值插入到列表中尚未包含的表中

时间:2017-10-24 16:05:53

标签: sql tsql

在44个值的列表中,我需要插入表中尚未包含的那些值中的任何一个。它已经有35个。如何编写SQL语句以仅插入其他9个?我将缩短列表只是为了使代码更具可读性。我开始只是尝试创建一个选择。问题是,这会返回表中不在我的列表中的所有行(超过800),而不仅仅是FROM MY LIST中不在目标表中的值。因此,在下面的列表中,如果表有Acquia,AngularJS,BitBucket和Blockchain,我只希望我的查询返回(或插入)Xamarin。

select *
from Technology t
where not exists
(
select 1
from
(values ('Acquia'),
('AngularJS'),
('BitBucket'),
('Blockchain'),
('Xamarin')) as TempTable(Name)
where t.Name = TempTable.Name)

2 个答案:

答案 0 :(得分:2)

您可以使用where子句筛选出已存在的子句:

with list as (
      select name
      from (values () . . . ) v
     )
insert into t (name)
     select name
     from list
     where not exists (select 1 from t where t.name = list.name);

答案 1 :(得分:1)

你可以试试这个:

INSERT INTO Technology 
SELECT .... 
FROM ... //new values
EXCEPT
select *
from Technology t;

有关EXCEPT的更多信息 - 基本上,您选择的是第一个SELECT以外的所有值,这些值已经由(包含在)第二个SELECT中返回。

相关问题