如何不重复复制表记录?

时间:2012-07-20 08:44:03

标签: mysql

我有一个包含一些重复的红色表的表。我想让唱片独一无二。我创建了一个新表(比如目标),并在其中指定了一个唯一的列。如何从table1(源)复制记录,使得如果记录插入目标表中,则不会再次插入记录。

3 个答案:

答案 0 :(得分:1)

您可以使用“select into”构造并选择仅插入不同的行,如下所示:

insert into table_without_dupes (column0, column1) select distinct column0, column1 from table_with_dupes

如果你有自动增量或其他列使行不同,你可以将它们从插入中删除并选择语句的部分。

编辑:

如果要通过单个列检测重复项,可以使用group by:

insert into table_without_dupes (column0, column1) select column0, column1 from table_with_dupes group by column0

MySQL允许你在select中引用非聚合列,但请记住documentation说“服务器可以自由选择每个组中的任何值”,如果你想选择一个特定的一行您可能会发现this示例有用。

答案 1 :(得分:1)

通用方法

insert into destination(col1,col2)
select DISTINCT col1,col2 from source as s where not exists
(select * from destination as d where d.col1=s.col1)

被修改

   insert into destination(col1,col2)
   SELECT distinct col1,col2 from source

已编辑(假设col3重复,您只需要其中一个副本。)

insert into destination(col1,col2,col3,....,colN)
SELECT col1,col2,col3,...,colN from source as s1 inner join
(
select col1,col2,max(col3) as  col3 
from source 
group by col1,col2
) as s2 on t1.col1=t2.col1 and t1.col2=t2.col2 and t1.col3=t2.col3

答案 2 :(得分:0)

insert into <dest_table_name>
select distinct * from <source_table_name>;