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

 更新时间:2022年03月08日 16:11:51   作者:超梦梦梦梦  
小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的

写在前面

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

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

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. 内连接 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!!!

重要的事情要说三遍!!!那怎么实现和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处理多级分类,查询结果呈树形结构

    SQL处理多级分类,查询结果呈树形结构

    对于多级分类常规的处理方法,很多程序员可能是用程序先读取一级分类记录,然后通过一级分类循环读取下面的子分类
    2012-08-08
  • SQL Server中的数据类型详解

    SQL Server中的数据类型详解

    本文详细讲解了SQL Server中的数据类型,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • SQL Server 海量数据导入的最快方法

    SQL Server 海量数据导入的最快方法

    这篇论坛文章(赛迪网技术社区)详细讲解了SQL Server海量数据导入的最快方法,更多内容请参考下文
    2008-12-12
  • SQL Server 2005 数据库转 SQL Server 2000的方法小结

    SQL Server 2005 数据库转 SQL Server 2000的方法小结

    这篇文章主要介绍了SQL Server 2005 数据库转 SQL Server 2000的方法,需要的朋友可以参考下
    2014-04-04
  • SQL Server中通配符的使用示例

    SQL Server中通配符的使用示例

    这篇文章主要介绍了SQL Server中通配符的使用示例,本文给出多个示例来讲解通配符的使用方法,需要的朋友可以参考下
    2015-07-07
  • SQLServer 2008数据库降级到2005低版本

    SQLServer 2008数据库降级到2005低版本

    SQLServer 2008R2备份的数据库还原到2008上面时报错引发的思考,如何把SQLServer数据库从高版本降级到低版本?本文为大家解答
    2016-11-11
  • 一条select语句引起的瓶颈问题思考

    一条select语句引起的瓶颈问题思考

    公司一项目新上线,刚上线的第2天,在后台发现数据库服务器与IIS服务器的网络IO出现瓶颈,1GB的网络带宽,占用了70%-100%,也就是每秒传输数据700MB-1GB,数据库使用内存高达21GB
    2013-02-02
  • SQLServer使用 PIVOT 和 UNPIVOT行列转换

    SQLServer使用 PIVOT 和 UNPIVOT行列转换

    本文主要介绍了SQLServer使用 PIVOT 和 UNPIVOT行列转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • SQL 中having 和where的区别分析

    SQL 中having 和where的区别分析

    在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集
    2012-11-11
  • 详解SQL Server的简单查询语句

    详解SQL Server的简单查询语句

    本篇文章详细讲解了SQL ServerSQL的简单查询语句。图文并茂,方便大家理解与学习。有兴趣的朋友可以看下
    2016-12-12

最新评论