Sql 通过选择插入时,如何在插入到表中之前检查重复项

Sql 通过选择插入时,如何在插入到表中之前检查重复项,sql,sql-server,sql-server-2005,tsql,sql-server-2008,Sql,Sql Server,Sql Server 2005,Tsql,Sql Server 2008,通过选择插入时,如何在插入表之前检查重复项: insert into table1 select col1, col2 from table2 我需要检查table1是否已经有一行table1.col1.value=table2.col1.value,如果是,则从插入中排除该行 insert into table1 select col1, col2 from table2 where table2.col1 not in (select col1 from table1) 使用除此之

通过选择插入时,如何在插入表之前检查重复项:

insert into table1
select col1, col2 
from table2
我需要检查table1是否已经有一行table1.col1.value=table2.col1.value,如果是,则从插入中排除该行

insert into table1
select col1, col2 
from table2 
where table2.col1 not in (select col1 from table1)
使用除此之外的其他选项

INSERT INTO @table2 
SELECT col1, 
       col2 
FROM   table1 
EXCEPT 
SELECT t1.col1, 
       t1.col2 
FROM   table1 t1 
       INNER JOIN table2 t2 
         ON t1.col1 = t2.col1 
            AND t1.col2 = t2.col2 
使用不存在的备选方案

INSERT INTO table2 
SELECT col1,col2 
FROM table1 t1
WHERE
NOT EXISTS( SELECT 1
    FROM table2 t2
    WHERE t1.col1 = t2.col1
          AND t1.col2 = t2.col2)

只需将IGNORE添加到insert语句中即可

e、 g


这是讨论过的

如果您只关心表1中不存在的col1,您可以将其添加到where子句中。这可能是最简单的答案,但我会选择外部连接,而不是标题如果我想同时检查col1和col2,我如何修改它?我需要检查两次吗?有几种方法。。。根据数据库中的列类型和索引,它们可能不是很有效。。。1) 创建表2中已经在表1中的项目的临时结果集,然后将剩余的项目(尚未在表1中)插入表1;2) 如果col1和col2是字符类型,您可以将它们连接起来,然后使用连接的值作为查找…有关错误原因的详细讨论(以及迄今为止发布的所有其他答案),请参阅。让原子升级工作要比这复杂得多。这只有在表1没有任何数据开始时才起作用。“表1”和“表2”之间的关系是什么?您将如何连接它们?那么为什么我要检查t1.col1是否为null?@Prabhu-
LEFT join…is null
是检查现有值并仅在不存在值的地方插入的常用方法。
NULL
表示
col1
中没有具有该值的现有行。
INSERT INTO @table2 
SELECT col1, 
       col2 
FROM   table1 
EXCEPT 
SELECT t1.col1, 
       t1.col2 
FROM   table1 t1 
       INNER JOIN table2 t2 
         ON t1.col1 = t2.col1 
            AND t1.col2 = t2.col2 
INSERT INTO table2 
SELECT col1,col2 
FROM table1 t1
WHERE
NOT EXISTS( SELECT 1
    FROM table2 t2
    WHERE t1.col1 = t2.col1
          AND t1.col2 = t2.col2)
INSERT IGNORE INTO table1
SELECT col1, col2 
FROM table2