从dest_table插入src_表而不重复

时间:2011-08-09 11:05:16

标签: mysql sql vb.net ms-access

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

请帮帮我吧

3 个答案:

答案 0 :(得分:2)

INSERT INTO dest_table (column1,column2,column3,...)
SELECT DISTINCT column1,column2,column3,...
FROM src_table

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

答案 1 :(得分:0)

如果没有重复,你还意味着没有在目标表中重复值吗?

如果是,您可以随时为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

基本上它会查找匹配失败的位置并仅插入这些记录。

答案 2 :(得分:0)

例如,使用此查询:

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语句......

祝你好运, 最大