LeetCode:196.删除重复的电子邮箱
题目链接:https://leetcode-cn.com/problems/delete-duplicate-emails/
题目
编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小的那个。
+----+------------------+
| Id | Email |
+----+------------------+
| 1 | john@example.com |
| 2 | bob@example.com |
| 3 | john@example.com |
+----+------------------+
Id 是这个表的主键。
例如,在运行你的查询语句之后,上面的 Person 表应返回以下几行:
+----+------------------+
| Id | Email |
+----+------------------+
| 1 | john@example.com |
| 2 | bob@example.com |
+----+------------------+
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/delete-duplicate-emails
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答
一开始觉得很简单啊,用 group by 就能解决问题,不过可能题目没说清楚,用 group by 提交一直不通过,本地测试是可以的,估计是必须要求用 delete 进行操作,而不是 select 。
---- MySQL ----
select min(Id) as Id,
Email
from Person
group by Email; -- 简单 只是不通过
参考官方答案之后的解答。
使用 delete 和 where 子句进行解答。
---- MySQL ----
# Write your MySQL query statement below
delete a from Person a,
Person b
where a.Email = b.Email
and a.Id > b.Id ---- 707ms
对MySQL还是不熟悉,语法跟oracle还是有一定的差别。
如果表名用了别名,delete后要加别名。
用 left join 试试看。
---- MySQL ----
delete a from Person a
left join Person b
on a.Email = b.Email
where a.Id > b.Id; ---- 726ms
通过 delete + 子查询,效率更高。
---- MySQL ----
delete from Person
where Id not in
(
select Id
from
(
select min(Id) as Id
from Person
group by Email
) b
); ---- 506ms
加多一层 select 是因为 delete 和 select 不能同时对一个表进行操作,所以添加一层外查询之后会生成一个临时表,这样子就可以进行 delete 操作了。
思考
通过自连接之后,判断2个id的大小,再进行删除。
对 delete 操作还是比较陌生,毕竟平时用的比较多还是 select 操作,只需要查询数据,就ok。
LeetCode:196.删除重复的电子邮箱的更多相关文章
- [LeetCode]196. 删除重复的电子邮箱(delete)
题目 编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个. +----+------------------+ | Id | Email | ...
- [LeetCode] 196.删除重复的电子邮箱
编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个. +----+------------------+ | Id | Email | +-- ...
- 【leetcode 简单】 第五十三题 删除重复的电子邮箱
编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个. +----+------------------+ | Id | Email | +-- ...
- [SQL]LeetCode196. 删除重复的电子邮箱 | Delete Duplicate Emails
Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique ...
- mysql查询之 连续出现的数字,重复出现的邮箱,删除重复的电子邮箱
1.编写一个 SQL 查询,查找所有至少连续出现三次的数字. +----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | ...
- [LeetCode] 182.查找重复的电子邮箱
编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱. 示例: +----+---------+ | Id | Email | +----+---------+ | 1 | a@b.co ...
- LeetCode 196. Delete Duplicate Emails (删除重复的电子邮箱)
题目标签: 题目给了我们一个 email 的表格,让我们删除重复的. 建立Person p1,Person p2,当email 相同时,而且 p1 id 要大于 p2 id 时候,删除这一行. Jav ...
- LeetCode:182.查找重复的电子邮箱
题目链接:https://leetcode-cn.com/problems/duplicate-emails/ 题目 编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱. 示例: +- ...
- [SQL]LeetCode182. 查找重复的电子邮箱 | Duplicate Emails
Write a SQL query to find all duplicate emails in a table named Person. +----+---------+ | Id | Emai ...
随机推荐
- Python 今天抽空学习了@Property
1.@Property有啥用 1) @property使方法像属性一样调用 @property可以把一个实例方法变成其同名属性,以支持.号访问,它亦可标记设置限制,加以规范 2) @property成 ...
- Eclipse的断点调试
A:Debug的作用 调试程序 查看程序执行流程 B:如何查看程序执行流程 什么是断点: 就是一个标记,从哪里开始. 如何设置断点: 你想看哪里的程序,你就在那个有效程序的左边双击即可. 在哪里设置断 ...
- Objective-C中的一些方法命名“潜规则”
在基于Apple Xcode的Objective-C中,有一些方法命名潜规则,比如就property而言,假定你定义了如下property: @interface MyObject @property ...
- Storm和Hadoop 区别
Storm - 大数据Big Data实时处理架构 什么是Storm? Storm是:• 快速且可扩展伸缩• 容错• 确保消息能够被处理• 易于设置和操作• 开源的分布式实时计算系统- 最初由Na ...
- Onvif协议及其在Android下的实现
好久没有写博客,今天将前段时间做的Onvif协议在Android上的实现分享给大家. 首先,我们先来了解一下什么是Onvif协议:ONVIF 协议是由Open Network Video Interf ...
- JAVA 基础编程练习题24 【程序 24 根据输入求输出】
24 [程序 24 根据输入求输出] 题目:给一个不多于 5 位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. package cskaoyan; public class cskaoya ...
- nginx 解决session一致性
session 粘滞性每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题. upstream backserver {ip_hash;server ...
- C4model实践总结
能看到这篇文章的人,我就不用废话给你介绍C4model.vscode.plantuml这些是什么以及怎么安装了. 0. 基本语法. 1. 创建常用模板.并保存到snippet. 2.利用关系REL控制 ...
- OPC Utgard的数据访问方式
1.同步读取某个点位的值 Item项的read()方法 Server server = new Server(BaseConfiguration.getCLSIDConnectionInfomatio ...
- Java工程师学习指南第6部分:深入理解JVM虚拟机
本文整理了微信公众号[Java技术江湖]发表和转载过的JVM虚拟机相关优质文章,想看到更多Java技术文章,就赶紧关注本公众号吧吧. JVM原理分析,看了都说好 JVM 深入学习:Java 解析 Cl ...