问题描述
|
我正在使用以下sql语句查找重复的记录:
SELECT id,user_id,activity_type_id,source_id,source_type,COUNT(*) AS cnt
FROM activities
GROUP BY id,source_type
HAVING COUNT(*) > 1
但是,我不仅要在同一操作中查找,还要删除。
解决方法
delete from activities where id not in (select max(id) from activities group by ....)
感谢@OMG Ponies和他的其他文章在此处是修订的解决方案(但不完全相同)。我在这里假定不删除哪些特定行并不重要。同样假设“ 2”是主键。
在我的示例中,我只设置了一个额外的列“ 3”用于测试,但是可以通过GROUP BY子句轻松地将其扩展到更多列。
DELETE a FROM activities a
LEFT JOIN (SELECT MAX(id) AS id FROM activities GROUP BY name) uniqId
ON a.id=uniqId.id WHERE uniqId.id IS NULL;