首頁 > 資料庫 > mysql教程 > 如何刪除MySQL中的重複記錄同時保留最新記錄?

如何刪除MySQL中的重複記錄同時保留最新記錄?

Mary-Kate Olsen
發布: 2024-12-01 13:30:11
原創
315 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板