我有两个表,src_table和dest_table src_table包含多行,包括重复行 我想将行从src_table复制到dest_table而不重复。
请帮帮我吧
答案 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
查询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
基本上它会查找匹配失败的位置并仅插入这些记录。
答案 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语句......
祝你好运, 最大