MySql-从表中删除重复项

MySql-从表中删除重复项,mysql,sql,Mysql,Sql,我的MySql服务器中有一个包含以下列的表: ID int,key,type int,name varchar 由于我的应用程序中出现错误,在数据库中插入了重复的条目,我想删除这些条目,以便每个类型和名称对中只有一行 关于如何执行此操作有何想法?显然,首先将此查询更改为select语句,以确保选择了正确的记录进行删除: delete from table as t1 using table as t2 where t1.type = t2.type and t1.name = t2.name a

我的MySql服务器中有一个包含以下列的表: ID int,key,type int,name varchar

由于我的应用程序中出现错误,在数据库中插入了重复的条目,我想删除这些条目,以便每个类型和名称对中只有一行


关于如何执行此操作有何想法?

显然,首先将此查询更改为select语句,以确保选择了正确的记录进行删除:

delete from table as t1
using table as t2
where t1.type = t2.type and t1.name = t2.name and t1.id > t2.id

这取决于你想保留什么和删除什么。由于ID是一个键,我猜没有重复的ID,只有重复的类型/名称对。下面是一个关于如何移除它们的想法:

delete from my_table t1
where exists (select 1 
                from my_table t2
               where t2.type = t1.type
                 and t2.name = t1.name
                 and t2.id < t1.id)

这将保留ID最高的副本。您需要选择distinct进入新表,然后删除旧表并重命名新表。但是有很多方法可以做到这一点:


我最终使用了这篇文章中的解决方案:

基本上,我创建了一个新表,并使用GROUPBY将数据从旧表复制到新表中,而没有重复 然后我放下旧桌子,重新命名了新桌子


谢谢大家。

有趣的语法,删除。。使用。我猜这是MySQL特有的?我试着运行脚本:从s_关系中删除t1,使用s_关系作为t2,其中t2.source_persona_id=t1.source_persona_id和t2.relation_type=t1.relation_type和t2.message_id=t1.message_id和t2.target_object_id=t1.target_object_id和t1.id>t2.id,但是出现了以下错误:SQL错误:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near'as t1的正确语法,使用s_关系作为t2,其中t2.source_persona_id=t1.source_persona_i'在第1行可能重复Nice链接,这些是一些有趣的技术,您在条件下两次得到了相同的方向,这两个都将保存最低的id。我已尝试运行以下操作:从s_关系中删除t1(存在)从s_关系中选择1,其中t2.source_persona_id=t1.source_persona_id和t2.relation_type=t1.relation_type和t2.message_id=t1.message_id和t2.target_object_id=t1.target_object_id和t1.id>t2.id但出现以下错误:SQL错误:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“t1 where exists select 1 from s_relations t2”附近使用的正确语法
                 and t2.id > t1.id