2011-08-09 17 views

回答

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

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

0

通过不重复你是否也意味着没有在目标表中重复值?

如果是的话,你总是可以做一个LEFT JOIN为它的SELECT查询在哪里列IS 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 

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

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

最好的问候, 最大