MYSQL删除重复记录但在数据库中首次出现

时间:2015-02-23 16:33:13

标签: mysql

我已经搜索了我的问题的解决方案,但是找不到与我需要完全匹配的东西。

我的数据库slug列有重复的条目。我需要删除所有重复项,但保留数据库中第一次出现的行。我不能只保留id列中最小的数字,因为它们在数据库中的顺序不同,例如......

id         slug
---------  -----------
4          example-1
3          example-1
2          example-1
1          example-1
5          example-1

我需要保留那个id为5的slug,并删除所有其他字段slug为example-1。这有可能吗?

2 个答案:

答案 0 :(得分:5)

不确定是否有一个语法可以一步完成。 但可以肯定的是,它可以通过两个简单的步骤来解决。

首先选择要保留在临时表中的行。

SELECT max(id), slug
FROM your_table
GROUP BY slug

然后只删除不在临时表中的所有行:

DELETE FROM your_table WHERE id NOT IN (SELECT id FROM temp_table)

答案 1 :(得分:1)

这应该很好用,但一定要备份你的数据。

DELETE FROM <table> a INNER JOIN <table> b ON a.slug = b.slug WHERE a.id < b.id;