由于最近的一个错误,我们有一个包含多个重复条目的表格。
我想要做的是找到并理想地删除(或者可能只是更新)重复的行。
PersonGroup
-----------
id
personId
groupId
type
primary
value
select count(*) cnt from personGroup pg where type="FOO" group by personId having cnt > 1;
产生近 20k 行。应该是 0。对于任何给定的 type
,每个 personId
都应该只有一个条目。
我可以编写一个程序来解决这个问题,但在我这样做之前,我想知道是否有一个纯 SQL 解决方案。
检查此查询。我认为它非常简单但有效:
delete from persongroup
where id not in (
select max(id)
from persongroup
group by PersonId);
如果你的表太大可以考虑用inner join来写
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;
以上查询未经测试