1. 程式人生 > >【LeetCode 簡單題】49-刪除重複電子郵箱

【LeetCode 簡單題】49-刪除重複電子郵箱

宣告:

今天是第49道題。編寫一個 SQL 查詢,來刪除 Person 表中所有重複的電子郵箱,重複的郵箱裡只保留 Id 最小 的那個。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除

(手動比心ღ( ´・ᴗ・` ))

正文

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

+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | 
[email protected]
| | 2 | [email protected] | | 3 | [email protected] | +----+------------------+ Id 是這個表的主鍵。

例如,在執行你的查詢語句之後,上面的 Person 表應返回以下幾行:

+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | [email protected] |
| 2  | [email protected]
| +----+------------------+

解法1。不用兩表join,直接用where判斷比較,耗時1022 ms, 在Delete Duplicate Emails的MySQL提交中擊敗了84.39% 的使用者,程式碼如下。

delete p1 from Person p1, Person p2 where p1.Email = p2.Email and p1.Id > p2.Id

解法2。先兩表join,所以會耗時更多,然後再選擇刪除Id值更大的樣本行,耗時1358 ms, 在Delete Duplicate Emails的MySQL提交中擊敗了43.57% 的使用者,程式碼如下。

delete p1 from Person p1 join Person p2 on p1.Email = p2.Email where p1.Id > p2.Id

結尾

解法1、解法2:https://yq.aliyun.com/articles/341594