我的MySql服务器中有一个表,其中包含以下列: ID(int,key),type(int),name(varchar)。
由于我的应用程序出错,重复的条目被插入到数据库中,我想删除这些条目,因此从每种类型&名称对只有一行。
关于如何做到这一点的任何想法?
答案 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,然后删除旧表并重命名新表。但是有很多方法可以做到这一点:
答案 3 :(得分:0)
我最终使用了这篇文章中的解决方案:http://www.justin-cook.com/wp/2006/12/12/remove-duplicate-entries-rows-a-mysql-database-table/
基本上,我创建了一个新表,并使用group by
将旧表中的数据复制到新表而没有重复
然后我放弃了旧桌子并重新命名了新桌子。
全部谢谢。