在 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)
提供你參考。