MySQL删除重复项

时间:2014-05-16 17:44:53

标签: mysql duplication

我几个月前更新了一个旧网站,从Joomla安装转移到定制系统。为了将Joomla表中的数据转换为新格式,我编写了各种php脚本,逐段遍历旧记录,处理它们并插入到新表中。一切都很好,直到我最近发现我忘记将die()语句添加到其中一个脚本的顶部,并且不知何故,搜索机器人一直在快速ping该脚本以在一个特定部分中精确添加610个重复项。

所以我对数据的了解是ID最低的行是我要保留的行,复制只存在于CATEGORY = 8中。为了确保重复,行ORIGINAL_ID将匹配

超越SELECT,INSERT,DELETE,我不是MySQL的专家,对如何处理这个问题感到困惑。专家们会提出什么建议?

编辑:示例代码

ID    CATEGORY    TITLE    ORIGINAL_ID
1     7           A        1
2     8           A        2
3     8           A        2
4     8           B        3
5     8           C        4
6     8           A        2

在上面的例子中,记录3& 6应该被剥离,因为它们在CATEGORY = 8,有重复​​的ORIGINAL_ID;但保留id最低的行(第2行)

1 个答案:

答案 0 :(得分:0)

因此,您要识别类别8中的记录,其中存在具有相同类别,标题和原始ID的另一记录。您还想检查其他记录是否具有较低的ID。

所以:

Select * 
from MYTABLE T1
where CATGEORY = 8
  and EXISTS (
        select 1 
        from MYTABLE T2 
        where T2.CATEGORY=T1.CATEGORY
          and T2.TITLE=T1.TITLE
        where T2.ORIGINAL_ID=T1.ORIGINAL_ID
        where T2.ID>T1.ID

如果你运行它并且它只返回你想要删除的记录,则替换"选择*"使用"删除"并重新运行。