如何刪除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中文網其他相關文章!