LeetCode數(shù)據(jù)庫(kù)題目
題目
編寫(xiě)一個(gè) SQL 查詢,來(lái)刪除 Person表中所有重復(fù)的電子郵箱,重復(fù)的郵箱里只保留 Id 最小 的那個(gè)。
+----+------------------+
| Id | Email |
+----+------------------+
| 1 | john@example.com |
| 2 | bob@example.com |
| 3 | john@example.com |
+----+------------------+
Id 是這個(gè)表的主鍵。
例如,在運(yùn)行你的查詢語(yǔ)句之后,上面的Person表應(yīng)返回以下幾行:
+----+------------------+
| Id | Email |
+----+------------------+
| 1 | john@example.com |
| 2 | bob@example.com |
+----+------------------+
思路
- 查詢目標(biāo):刪除一條記錄
- 查詢范圍:Person表
- 查詢條件:刪除所有重復(fù)的電子郵箱 ,重復(fù)的郵箱里只保留Id最小的哪個(gè)。
顯然,通過(guò)這個(gè)查詢條件可以提取出來(lái)兩條and關(guān)系的條件:
(1)找出所有重復(fù)的電子郵箱(2)刪除Id大的重復(fù)郵箱;
對(duì)于條件(1),需要判斷出所有重復(fù)的電子郵箱,即p1.Email = p2.Email;
對(duì)于條件(2),需要判斷重復(fù)郵箱中Id較大的:p1.Id > p2.Id
解答
delete
p1
from
Person p1,
Person p2
where
(p1.email = p2.email) and (p1.id > p2.id)