MySql - 从表中删除重复项

时间:2011-08-26 15:13:04

标签: mysql sql

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

由于我的应用程序出错,重复的条目被插入到数据库中,我想删除这些条目,因此从每种类型&名称对只有一行。

关于如何做到这一点的任何想法?

4 个答案:

答案 0 :(得分:1)

这取决于您要保留的内容以及要删除的内容。由于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的“重复”

                 and t2.id > t1.id

这将保留具有最高ID

的“重复”

答案 1 :(得分:0)

显然首先将此查询更改为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

答案 2 :(得分:0)

您需要在新表中选择distinct,然后删除旧表并重命名新表。但是有很多方法可以做到这一点:

What's the best way to dedupe a table?

答案 3 :(得分:0)

我最终使用了这篇文章中的解决方案:http://www.justin-cook.com/wp/2006/12/12/remove-duplicate-entries-rows-a-mysql-database-table/

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

全部谢谢。