【LeetCode 簡單題】49-刪除重複電子郵箱
阿新 • • 發佈:2018-11-04
宣告:
今天是第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