欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL刪除重復(fù)的電子郵箱力扣題目解答流程

 更新時(shí)間:2022年03月08日 16:11:51   作者:超夢(mèng)夢(mèng)夢(mèng)夢(mèng)  
小伙伴們都知道,不管是在學(xué)習(xí)中還是日常工作中,幾乎天天是要跟數(shù)據(jù)庫打交道的,為了更好的操作數(shù)據(jù)庫,我們的SQL知識(shí)儲(chǔ)備是必不可少的

寫在前面

想要掌握好SQL,那少不了每天的練習(xí)與學(xué)習(xí)。接下來小夢(mèng)會(huì)帶領(lǐng)小伙伴們一起每天刷一道LeetCode-數(shù)據(jù)庫(SQL)相關(guān)的題目,然后在文章后例舉相關(guān)知識(shí)點(diǎn)幫助小伙伴們學(xué)習(xí)與鞏固,更好的掌握SQL。

??‍♂? 小伙伴們?nèi)绻趯W(xué)習(xí)過程中有不明白的地方,歡迎評(píng)論區(qū)留言提問,小夢(mèng)定知無不言,言無不盡。

SQL題目概述

題目:

編寫一個(gè) SQL 查詢,來刪除 Person 表中所有重復(fù)的電子郵箱,重復(fù)的郵箱里只保留 Id 最小 的那個(gè)。

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 是這個(gè)表的主鍵。

解題思路

  • 通過  自連接  將此表與它自身連接起來,通過電子郵箱列。
  • 然后我們需要找到其他記錄中具有相同電子郵件地址的更大 ID。所以我們通過ID作比較找出大的數(shù)據(jù),把這個(gè)作為條件添加到WHERE子句中。
  • 因?yàn)槲覀円呀?jīng)得到了要?jiǎng)h除的記錄,然后我們使用DELETE語句實(shí)現(xiàn)。

方法實(shí)現(xiàn)

根據(jù)以上解題思路,我們可以很容易寫出題解。

DELETE 
    pson1
FROM 
    Person pson1,Person pson2
WHERE 
    pson1.Email = pson2.Email AND pson1.Id > pson2.Id
 

代碼測(cè)試

進(jìn)行代碼測(cè)試

 與預(yù)期結(jié)果一致,測(cè)試成功,用時(shí)166ms

知識(shí)點(diǎn)小結(jié)

 ?內(nèi)連接與外連接?

小夢(mèng)用極簡(jiǎn)單的方式帶小伙伴們過一遍內(nèi)連接與外連接。

 表1 classa             

表2 classb

1. 內(nèi)連接 inner join (join 默認(rèn)就是內(nèi)連接)

表1與表2的交集,用上面兩個(gè)表演示一下

select 
    classa.id as aid,classb.id as bid 
from 
    classa 
inner join classb on classa.id = classb.id;

 查詢的結(jié)果是classa與classb的交集

2. 左外連接 left join

結(jié)果集保留左表的所有行,但右表只包含與左表匹配的行。右表相應(yīng)的空行為NULL值。

select 
    classa.id as aid,classb.id as bid 
from 
    classa 
left join classb on classa.id = classb.id;

3. 右外連接 right join

結(jié)果集保留右表的所有行,但左表只包含與右表匹配的行。左表相應(yīng)的空行為NULL值。

select 
    classa.id as aid,classb.id as bid 
from 
    classa 
right join classb on classa.id = classb.id;

4. 全外連接 full join

會(huì)把兩個(gè)表所有的行都顯示在結(jié)果表中。

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?。。ySQL不支持full join?。?!

重要的事情要說三遍!??!那怎么實(shí)現(xiàn)和full join一樣的效果呢?那就要通過使用union來實(shí)現(xiàn),具體實(shí)現(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;

到此這篇關(guān)于SQL刪除重復(fù)的電子郵箱解答流程的文章就介紹到這了,更多相關(guān)SQL 刪除重復(fù)郵箱內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論