您好,登錄后才能下訂單哦!
今天小編給大家分享一下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作比較找出大的數據,把這個作為條件添加到WHERE子句中。
因為我們已經得到了要刪除的記錄,然后我們使用DELETE語句實現。
根據以上解題思路,我們可以很容易寫出題解。
DELETE pson1 FROM Person pson1,Person pson2 WHERE pson1.Email = pson2.Email AND pson1.Id > pson2.Id
進行代碼測試
與預期結果一致,測試成功,用時166ms
?內連接與外連接?
小夢用極簡單的方式帶小伙伴們過一遍內連接與外連接。
表1 classa
表2 classb
表1與表2的交集,用上面兩個表演示一下
select classa.id as aid,classb.id as bid from classa inner join classb on classa.id = classb.id;
查詢的結果是classa與classb的交集
結果集保留左表的所有行,但右表只包含與左表匹配的行。右表相應的空行為NULL值。
select classa.id as aid,classb.id as bid from classa left join classb on classa.id = classb.id;
結果集保留右表的所有行,但左表只包含與右表匹配的行。左表相應的空行為NULL值。
select classa.id as aid,classb.id as bid from classa right join classb on classa.id = classb.id;
會把兩個表所有的行都顯示在結果表中。
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!!!
重要的事情要說三遍!!!那怎么實現和full join一樣的效果呢?那就要通過使用union來實現,具體實現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怎么刪除重復的電子郵箱”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。