天天看點

​LeetCode刷題實戰196:删除重複的電子郵箱

算法的重要性,我就不多說了吧,想去大廠,就必須要經過基礎知識和業務邏輯面試+算法面試。是以,為了提高大家的算法能力,這個公衆号後續每天帶大家做一道算法題,題目就從LeetCode上面選 !

今天和大家聊的問題叫做 删除重複的電子郵箱,我們先來看題面:

https://leetcode-cn.com/problems/delete-duplicate-emails/

Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique emails based on its smallest Id.

題意

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

​LeetCode刷題實戰196:删除重複的電子郵箱

解題

  • 查詢目标:删除一條記錄
  • 查詢範圍: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)           

複制

好了,今天的文章就到這裡,如果覺得有所收獲,請順手點個在看或者轉發吧,你們的支援是我最大的動力 。