在两个(或更多)列上查找重复条目并删除最近的列

时间:2015-01-12 03:46:28

标签: mysql

我犯了一个大错误。出于某种原因,我忘记在正在编辑条目的表上应用唯一索引。这意味着我的表现在包含许多重复项。

我能做的最好的事情就是选择重复项并删除所有ID最大的项目。

表结构如下所示:

My table structure

inzerat条目代表文章ID,lang代表描述语言。显然,每篇文章和语言只有一个文本。但我现在甚至无法创建索引:

#1062 - Duplicate entry '33-NULL' for key 'Inzerat'

NULL结果必须是某种废话 - 所有lang值都包含csenru

image description

无论如何,我需要的是删除每个重复组的最新条目。最大id的条目被认为是最新的,不得删除。

我甚至未能将实际重复的条目作为列表获取:

SELECT *, COUNT(*) c FROM inzerat_popis GROUP BY inzerat,lang HAVING c > 1
ORDER BY `inzerat_popis`.`inzerat` ASC

image description

条目被分组,隐藏个人id

请尽量回答一般的答案。 StackOverflow上已有关于此主题的问题和答案,但所有内容都是如此本地化,以至于我不知道如何在我的案例中使用它们。

1 个答案:

答案 0 :(得分:2)

您可以使用delete以及要保留的ID执行join

delete p
    from inzerat_popis p left join
         (select inzerat, lang, max(id) as maxid
          from inzerat_popis p
          group by inzerat, lang
         ) il
         on p.id = il.maxid
    where il.maxid is null;

我建议运行等效的select语句,以确保它能满足要求。要查看要删除的内容,请使用:

    select p.*
    from inzerat_popis p left join
         (select inzerat, lang, max(id) as maxid
          from inzerat_popis p
          group by inzerat, lang
         ) il
         on p.id = il.maxid
    where il.maxid is null