我犯了一个大错误。出于某种原因,我忘记在正在编辑条目的表上应用唯一索引。这意味着我的表现在包含许多重复项。
我能做的最好的事情就是选择重复项并删除所有ID最大的项目。
表结构如下所示:
inzerat
条目代表文章ID,lang
代表描述语言。显然,每篇文章和语言只有一个文本。但我现在甚至无法创建索引:
NULL
结果必须是某种废话 - 所有lang
值都包含cs
,en
或ru
。
无论如何,我需要的是删除每个重复组的最新条目。最大id
的条目被认为是最新的,不得删除。
我甚至未能将实际重复的条目作为列表获取:
SELECT *, COUNT(*) c FROM inzerat_popis GROUP BY inzerat,lang HAVING c > 1
ORDER BY `inzerat_popis`.`inzerat` ASC
条目被分组,隐藏个人id
。
请尽量回答一般的答案。 StackOverflow上已有关于此主题的问题和答案,但所有内容都是如此本地化,以至于我不知道如何在我的案例中使用它们。
答案 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