我有两个表,src_table和dest_table src_table包含多行,包括重复 我想从src_table复制到dest_table没有重复的行。从dest_table插入到src_表中没有重复
请帮帮我吧
我有两个表,src_table和dest_table src_table包含多行,包括重复 我想从src_table复制到dest_table没有重复的行。从dest_table插入到src_表中没有重复
请帮帮我吧
INSERT INTO dest_table (column1,column2,column3,...)
SELECT DISTINCT column1,column2,column3,...
FROM src_table
只需使用INSERT INTO ... SELECT DISTINCT。这只会选择不同的值。如果要复制所有列,只需从INSERT行中删除列,然后在SELECT中添加一个星号(*)。小心主键,不同的只有在选定的行100%重复时才有效。
通过不重复你是否也意味着没有在目标表中重复值?
如果是的话,你总是可以做一个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
基本上它会查找匹配失败的位置,并只插入这些记录。
例如使用此查询:
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语句...
最好的问候, 最大
@all什么的筛选条件有重复吗?哪一个应该选择? – ajreal