从 dest_table 插入 src_ 表而不重复

Posted

技术标签:

【中文标题】从 dest_table 插入 src_ 表而不重复【英文标题】:Insert into src_ table from dest_table without duplicate 【发布时间】:2011-08-09 11:05:15 【问题描述】:

我有两个表,src_table 和 dest_table src_table 包含多行,包括重复项 我想将行从 src_table 复制到 dest_table 而不重复。

请帮帮我

【问题讨论】:

@all 过滤条件是什么,是否存在重复?应该选哪一个? 【参考方案1】:
INSERT INTO dest_table (column1,column2,column3,...)
SELECT DISTINCT column1,column2,column3,...
FROM src_table

只需使用 INSERT INTO ... SELECT DISTINCT。这只会选择不同的值。如果要复制所有列,只需从 INSERT 行中删除列并在 SELECT 中添加星号 (*)。当心主键,distinct 仅在所选行是 100% 重复时才有效。

【讨论】:

【参考方案2】:

不重复是否也意味着不重复目标表中的值?

如果是,您可以随时在其上执行LEFT JOIN 查询,以查询SELECTIS NULL

INSERT INTO dest_table ( column1, column2, column3, ... )
    SELECT DISTINCT column1, column2, column3, ...
    FROM src_table a
    LEFT JOIN dest_table b ON a.column1 = b.column1 AND a.column2 = b.column2
              a.column3 = b.column3 ...
    WHERE b.column1 IS NULL

基本上它会寻找匹配失败的地方,并且只插入那些记录。

【讨论】:

【参考方案3】:

例如使用这个查询:

create table #T1 (field1 int, field2 int)

insert #T1 values (1,2)
insert #T1 values (1,3)
insert #T1 values (2,1)

create table #T2 (field1 int, field2 int)

insert #T2 values (1,3) /*exists in first table*/
insert #T2 values (1,4) 
insert #T2 values (1,4) /*dublicated*/
insert #T2 values (2,2)

insert #T1
select distinct field1, field2 from #T2
where not exists (select 1 from #T1 where #T1.field1 = #T2.field1 and #T1.field2 = #T2.field2)

select * from #T1

另外在 t-sql 中存在非常有用的 MERGE 语句...

最好的问候, 最大

【讨论】:

以上是关于从 dest_table 插入 src_ 表而不重复的主要内容,如果未能解决你的问题,请参考以下文章

将多行插入多个表而不重复“INSERT INTO”

将完整的 ADO 记录集插入现有的 ACCESS 表而不使用循环

通过单击链接发送 AJAX 请求而不重定向用户

如何创建临时表而不丢失 django 中的 ORM?

将数据从 Excel 文件导入 SQL 表而不重复?

从 orc 文件创建配置单元表而不指定架构