使用sql查找重复记录并在同一操作中删除

问题描述

| 我正在使用以下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;