我有一个数据库表,称之为“t1”,另一个表称之为“t2”
如果不在t2中,我想将某些东西插入t1。知道它是否已经在t2(AKA是一个DUPLICATE)的条件是来自t2中一个条目中的一个字段的文本是否已经存在(与要插入的字段完全匹配
如何使用SQL服务器制定此条件?
答案 0 :(得分:1)
你想要
如果某个项目在t2中已经“已经”,但在t1中没有,那么我想避免执行INSERT语句。
所以插入应该在否定上述陈述时发生,即
项目不应该在t2中,而项目应该出现在t1
中insert into target_table( column list )
select ( column list)
from source_table
where item not in (select item from t2)
and item in (select item from t1)
我的意思是,如果文章不在t2中,那么我想将其插入到t1中。它非常简单
insert into t1 ( <column list>)
select <column list>
from source_table
where item not in (select item from t2)
您可以使用
IF NOT EXISTS (SELECT * FROM t2 WHERE item like '%'+@itemvalue+'%')
BEGIN
INSERT INTO t1
VALUES (@itemvalue)
END
答案 1 :(得分:0)
您可以使用VALUES中的SELECT并与t2连接,例如,同时插入多行(当然您只能插入一行)
insert into t1 ( id, label)
select id, label
from (VALUES(1, 'item1'),
(3, 'item3'),
(5, 'item5')) as T(id,label)
where not exists(select 1 from t2 where t2.id = t.id)
此FROM VALUES语法在Sql2008中可用,对于以前的版本,您已替换
VALUES(...)
条款
与
SELECT 1,'idem1'
UNION ALL SELECT 2, 'item2'
如果您的数据包含在变量中,则只需执行(NO FROM):
insert t1 ( id, label)
select @id, @label
where not exists(select 1 from t2 where t2.id = @id)