[MySQL] 在MySQL中找尋或刪除重複的記錄

在 MySQL 的資料庫中,若有些欄位我們在使用後才想要讓某個欄位的值不重複,讓如何刪除這個欄位中重複的值呢?例如我們在開發會員系統時,資料建置後才想到要讓電子郵件欄位不重複,就會遇到這個問題。

以下我們以一個 people 資料表來進行說明:
如果我們想找尋資料表中多餘的重複記錄,重複記錄是根據單個字段(peopleId)來判斷:

select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 

刪除表中多餘的重複記錄,重複記錄是根據單個字段(peopleId)來判斷,只留有 rowid 最小的記錄

delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1) 

尋找資料表中多餘的重複記錄(多個字段)

delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1) 

刪除資料表中多餘的重複記錄(多個字段),只留有  rowid  最小的記錄

delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) 

尋找資料表中多餘的重複記錄(多個字段),不包含rowid最小的記錄

select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) 

提供你參考。