如何删除 mysql 中的所有重复行

how to delete all duplicate rows in mysql

这是我的 table role_users 特定 id

我想删除 role_id 和 user_id 的所有重复行,如果有 2 条或更多记录,那么应该只有 1 条最新记录,其他的应该删除。这个怎么写啊?

您可以使用 delete ... from ... join... 语法:

delete r
from role_users r
inner join (
    select role_id, user_id, max(id) max_id
    from role_users
    group by role_id, user_id
) r1 
    on r.role_id = r1.role_id 
    and r.user_id = r1.user_id
    and r.id < r1.max_id

尝试以下方法:

以下查询将为您提供按 role_id 和 user_id

分组的所有唯一记录的 ID
SELECT MAX(id) FROM role_users GROUP BY role_id, user_id

注意这里的 MAX 函数获取最新创建的记录假设 id 是 auto_increment

在嵌套查询中使用它删除所有其他重复记录

DELETE FROM role_users WHERE id NOT IN (SELECT MAX(id) FROM role_users GROUP BY role_id, user_id);

让我知道它是否有效:)