我已经搜索了我的问题的解决方案,但是找不到与我需要完全匹配的东西。
我的数据库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。这有可能吗?
答案 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;