SQL刪除重復的電子郵箱力扣題目解答流程
寫在前面
想要掌握好SQL,那少不了每天的練習與學習。接下來小夢會帶領小伙伴們一起每天刷一道LeetCode-數(shù)據(jù)庫(SQL)相關的題目,然后在文章后例舉相關知識點幫助小伙伴們學習與鞏固,更好的掌握SQL。
??♂? 小伙伴們如果在學習過程中有不明白的地方,歡迎評論區(qū)留言提問,小夢定知無不言,言無不盡。

SQL題目概述
題目:
編寫一個 SQL 查詢,來刪除 Person 表中所有重復的電子郵箱,重復的郵箱里只保留 Id 最小 的那個。
LeetCode原題連接

https://leetcode-cn.com/problems/delete-duplicate-emails/
Person 表
+----+------------------+
| Id | Email |
+----+------------------+
| 1 | john@example.com |
| 2 | bob@example.com |
| 3 | john@example.com |
+----+------------------+
Id 是這個表的主鍵。
解題思路
- 通過 自連接 將此表與它自身連接起來,通過電子郵箱列。
- 然后我們需要找到其他記錄中具有相同電子郵件地址的更大 ID。所以我們通過ID作比較找出大的數(shù)據(jù),把這個作為條件添加到WHERE子句中。
- 因為我們已經(jīng)得到了要刪除的記錄,然后我們使用DELETE語句實現(xiàn)。
方法實現(xiàn)
根據(jù)以上解題思路,我們可以很容易寫出題解。
DELETE
pson1
FROM
Person pson1,Person pson2
WHERE
pson1.Email = pson2.Email AND pson1.Id > pson2.Id
代碼測試
進行代碼測試

與預期結果一致,測試成功,用時166ms

知識點小結
?內連接與外連接?
小夢用極簡單的方式帶小伙伴們過一遍內連接與外連接。
表1 classa

表2 classb

1. 內連接 inner join (join 默認就是內連接)
表1與表2的交集,用上面兩個表演示一下
select
classa.id as aid,classb.id as bid
from
classa
inner join classb on classa.id = classb.id;查詢的結果是classa與classb的交集

2. 左外連接 left join
結果集保留左表的所有行,但右表只包含與左表匹配的行。右表相應的空行為NULL值。
select
classa.id as aid,classb.id as bid
from
classa
left join classb on classa.id = classb.id;
3. 右外連接 right join
結果集保留右表的所有行,但左表只包含與右表匹配的行。左表相應的空行為NULL值。
select
classa.id as aid,classb.id as bid
from
classa
right join classb on classa.id = classb.id;
4. 全外連接 full join
會把兩個表所有的行都顯示在結果表中。
select
classa.id as aid,classb.id as bid
from
classa
full join classb on classa.id = classb.id;小伙伴們注意啦?。?!
MySQL不支持full join?。?!MySQL不支持full join?。?!MySQL不支持full join?。?!
重要的事情要說三遍?。?!那怎么實現(xiàn)和full join一樣的效果呢?那就要通過使用union來實現(xiàn),具體實現(xiàn)SQL語句如下
select
classa.id as aid,classb.id as bid
from
classa left join classb on classa.id = classb.id
union
select
classa.id as aid,classb.id as bid
from
classa right join classb on classa.id = classb.id;
到此這篇關于SQL刪除重復的電子郵箱解答流程的文章就介紹到這了,更多相關SQL 刪除重復郵箱內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SQL Server 海量數(shù)據(jù)導入的最快方法
這篇論壇文章(賽迪網(wǎng)技術社區(qū))詳細講解了SQL Server海量數(shù)據(jù)導入的最快方法,更多內容請參考下文2008-12-12
SQL Server 2005 數(shù)據(jù)庫轉 SQL Server 2000的方法小結
這篇文章主要介紹了SQL Server 2005 數(shù)據(jù)庫轉 SQL Server 2000的方法,需要的朋友可以參考下2014-04-04
SQLServer 2008數(shù)據(jù)庫降級到2005低版本
SQLServer 2008R2備份的數(shù)據(jù)庫還原到2008上面時報錯引發(fā)的思考,如何把SQLServer數(shù)據(jù)庫從高版本降級到低版本?本文為大家解答2016-11-11
SQLServer使用 PIVOT 和 UNPIVOT行列轉換
本文主要介紹了SQLServer使用 PIVOT 和 UNPIVOT行列轉換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-08-08

