在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)
答案 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
中返回。