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