編寫一個 SQL 查詢,來刪除 Person表中所有重複的電子郵箱,重複的郵箱裏只保留 Id 最小 的那個。

題目
編寫一個 SQL 查詢,來刪除 Person表中所有重複的電子郵箱,重複的郵箱裏只保留 Id 最小的那個。

Id Email
1 [email protected]
2 [email protected]
3 [email protected]

Id 是這個表的主鍵。
例如,在運行你的查詢語句之後,上面的Person表應返回以下幾行:

Id Email
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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章