如何删除 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);
让我知道它是否有效:)
这是我的 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
分组的所有唯一记录的 IDSELECT 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);
让我知道它是否有效:)