首页 > 数据库 > mysql教程 > 如何删除MySQL中的重复记录同时保留最新记录?

如何删除MySQL中的重复记录同时保留最新记录?

Mary-Kate Olsen
发布: 2024-12-01 13:30:11
原创
275 人浏览过

How to Delete Duplicate Records in MySQL While Retaining the Latest?

如何删除 MySQL 中的重复记录,同时保留最新

在处理包含唯一标识符和重复电子邮件地址的表时,这是通常需要删除这些重复项,同时保留最新的记录。 MySQL 提供了多种方法来实现此目标。

一种方法涉及识别重复的电子邮件地址并查找每封电子邮件的最新记录(由最大 ID 表示)。这可以使用 GROUP BY、HAVING 和 MAX() 函数的组合来完成。

识别出最新记录后,下一步就是删除 ID 低于其 ID 的所有重复记录。各自的最大ID。这可以通过使用 INNER JOIN 比较电子邮件地址和 ID 值的 DELETE 语句来完成。

示例数据库表

为了说明此过程,请考虑下表名为“test”:

    ID                     EMAIL                
    ---------------------- -------------------- 
    1                      aaa                  
    2                      bbb                  
    3                      ccc                  
    4                      bbb                  
    5                      ddd                  
    6                      eee                  
    7                      aaa                  
    8                      aaa                  
    9                      eee 
登录后复制

识别重复项电子邮件

    select email 
    from test
    group by email
    having count(*) > 1;
登录后复制

此查询返回以下结果,表明 'aaa'、'bbb' 和 'eee' 是重复的电子邮件:

    EMAIL                
    -------------------- 
    aaa                  
    bbb                  
    eee  
登录后复制

查找最近的记录

    select max(id) as lastId, email
    from test
    where email in (
        select email 
        from test
        group by email
        having count(*) > 1
    )
    group by email;
登录后复制

此查询检索每个重复项的最大 ID 和相应的电子邮件地址:

    LASTID                 EMAIL                
    ---------------------- -------------------- 
    8                      aaa                  
    4                      bbb                  
    9                      eee                                 
登录后复制

删除重复记录

    delete test
    from test
    inner join (
        select max(id) as lastId, email
        from test
        where email in (
            select email 
            from test
            group by email
            having count(*) > 1
        )
        group by email
    ) duplic on duplic.email = test.email
    where test.id < duplic.lastId;
登录后复制

执行此查询后,“test”表将包含仅每个电子邮件地址的最新记录,结果如下data:

    +----+-------+
    | id | email |
    +----+-------+
    |  3 | ccc   |
    |  4 | bbb   |
    |  5 | ddd   |
    |  8 | aaa   |
    |  9 | eee   |
    +----+-------+
登录后复制

优化的删除查询

下面提供了另一种更优化的删除查询:

    delete from test
    where id not in (
        select max(id)
        from test
        group by email)
登录后复制

以上是如何删除MySQL中的重复记录同时保留最新记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板