題目
編寫一個 SQL 查詢,來刪除 Person表中所有重複的電子郵箱,重複的郵箱裏只保留 Id 最小的那個。
Id | |
---|---|
1 | [email protected] |
2 | [email protected] |
3 | [email protected] |
Id 是這個表的主鍵。
例如,在運行你的查詢語句之後,上面的Person表應返回以下幾行:
Id | |
---|---|
1 | [email protected] |
2 | [email protected] |
思路
查詢目標:刪除一條記錄
查詢範圍:Person表
查詢條件:刪除所有重複的電子郵箱 ,重複的郵箱裏只保留Id最小的哪個。
顯然,通過這個查詢條件可以提取出來兩條and關係的條件:
(1)找出所有重複的電子郵箱(2)刪除Id大的重複郵箱;
對於條件(1),需要判斷出所有重複的電子郵箱,即p1.Email = p2.Email;
對於條件(2),需要判斷重複郵箱中Id較大的:p1.Id > p2.Id
解答
delete
p1
from
Person p1,
Person p2
where
(p1.email = p2.email) and (p1.id > p2.id)