比较两个数据库中的文章,只在以下条件下删除

时间:2013-12-01 08:51:05

标签: sql sql-server

我有一个数据库表,称之为“t1”,另一个表称之为“t2”

如果不在t2中,我想将某些东西插入t1。知道它是否已经在t2(AKA是一个DUPLICATE)的条件是来自t2中一个条目中的一个字段的文本是否已经存在(与要插入的字段完全匹配

如何使用SQL服务器制定此条件?

2 个答案:

答案 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)