1. 程式人生 > >刪除表中重複記錄的辦法

刪除表中重複記錄的辦法

例如表 table

id name,age
1  menes 20
2  sky   25
3  menes 20

首先 簡單說下group by

如果一個select語句中使用了group by 例如 select name,age from table group by name,age
執行此查詢後如果name,age的組合不是隻有一條,將只返回相同記錄中的第一條記錄。
那麼,上述select語句(select name,age from table group by name,age)返回的是表table中name,age的組合不重複的所有記

錄。也就是如下記錄

name  age
menes 20
sky   25

那麼select min(id) from table group by name,age返回的是什麼樣的記錄呢?

顯而易見是表table中name,age的組合不重複的,如果有重複的,則取對應的id欄位最小的所有記錄的id。即:

1
2

這樣,就得到了刪除表中重複記錄的sql語句

delete from table where id not in(select min(id) from table group by name,age);

意思是刪除table中id 欄位 不屬於 name,age組合唯一的,也不屬於 不唯一記錄中id欄位最小的 記錄。

解釋:不屬於name,age組合中唯一的,也不屬於不唯一記錄中id欄位最小的,那會是什麼?肯定是重複的,且不是id最小的。
刪之。呵呵。