当前位置:首页 > 开发教程 > 数据库 >

SQL删除重复的电子邮箱力扣题目解答流程

时间:2022-03-08 19:54 来源:未知 作者:初相遇 收藏

小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的

写在前面

想要掌握好SQL,那少不了每天的练习与学习。接下来小梦会带领小伙伴们一起每天刷一道LeetCode-数据库(SQL)相关的题目,然后在文章后例举相关知识点帮助小伙伴们学习与巩固,更好的掌握SQL。

‍♂ 小伙伴们如果在学习过程中有不明白的地方,欢迎评论区留言提问,小梦定知无不言,言无不尽。

SQL删除重复的电子邮箱力扣题目解答流程

SQL题目概述

题目:

编写一个 SQL 查询,来删除Person表中所有重复的电子邮箱,重复的邮箱里只保留Id最小的那个。

LeetCode原题连接

SQL删除重复的电子邮箱力扣题目解答流程

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
 

代码测试

进行代码测试

SQL删除重复的电子邮箱力扣题目解答流程

与预期结果一致,测试成功,用时166ms

SQL删除重复的电子邮箱力扣题目解答流程

知识点小结

内连接与外连接

小梦用极简单的方式带小伙伴们过一遍内连接与外连接。

表1 classa

SQL删除重复的电子邮箱力扣题目解答流程

表2 classb

SQL删除重复的电子邮箱力扣题目解答流程

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的交集

SQL删除重复的电子邮箱力扣题目解答流程

2. 左外连接 left join

结果集保留左表的所有行,但右表只包含与左表匹配的行。右表相应的空行为NULL值。

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

SQL删除重复的电子邮箱力扣题目解答流程

3. 右外连接 right join

结果集保留右表的所有行,但左表只包含与右表匹配的行。左表相应的空行为NULL值。

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

SQL删除重复的电子邮箱力扣题目解答流程

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!!!

重要的事情要说三遍!!!那怎么实现和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删除重复的电子邮箱力扣题目解答流程

到此这篇关于SQL删除重复的电子邮箱解答流程的文章就介绍到这了,更多相关SQL 删除重复邮箱内容请搜索源码搜藏网以前的文章或继续浏览下面的相关文章希望大家以后多多支持源码搜藏网!


数据库阅读排行

最新文章