由于最近的错误,我们有一个包含多个重复条目的表。
我想做的是找到并理想地删除(或只是更新)重复的行。
PersonGroup
-----------
id
personId
groupId
type
primary
value
select count(*) cnt from personGroup pg where type="FOO" group by personId having cnt > 1;
产生近2万行。应该为0。对于任何给定的personId
,每个type
应该只有一个条目。
我可以编写一个程序来解决这种情况,但是在此之前,我想知道是否有一个纯粹的SQL解决方案。
答案 0 :(得分:1)
检查此查询。我认为这非常简单而且有效:
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;
以上查询未经测试