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