mysql - 如何识别和删除或更新Mysql表中的重复行
问题描述
由于最近的一个错误,我们有一个包含多个重复条目的表。
我想要做的是找到并理想地删除(或者可能只是更新)重复的行。
PersonGroup
-----------
id
personId
groupId
type
primary
value
select count(*) cnt from personGroup pg where type="FOO" group by personId having cnt > 1;
产生近 20k 行。应该有 0。personId
对于任何给定的 ,每个都应该只有一个条目type
。
我可以编写一个程序来解决这种情况,但在我这样做之前,我想知道是否有一个纯粹的 SQL 解决方案。
解决方案
检查此查询。我认为它非常简单但有效:
delete from persongroup
where id not in (
select max(id)
from persongroup
group by PersonId);
如果你的表太大那么你可以考虑用内连接写这个
delete persongroup
from persongroup
inner join (
select max(id) as lastId, personId
from personGroup
group by personId
having count(*) > 1) dup on dup.personId = persongroup.personId
where persongroup.id < dup.lastId;
以上查询未经测试
推荐阅读
- docker - 如何防止 docker build 重新下载复制的 Go 供应商
- python - 返回一种设置类属性的方法
- javascript - react-hook-form:handleSubmit 不是函数
- c# - 在 C# 中使用 Selenium 添加功能的正确方法是什么?
- reactjs - 如何在 Reactjs 中使用上下文提供者和消费者?
- css - 我怎样才能将“调整大小手柄”绝对定位在另一个具有位置粘性的元素之上?
- azure - Xamarin 表单中的 Azure AD B2C
- c - 使用 valgrind 时出现“断言‘iFuncWrapper’失败”
- php - Laravel PHP - 在字符串中使用路由参数
- c++ - 将2个大数相乘并将其存储在一个长变量中,但会发生溢出