美文网首页
【LeetCode】196. 删除重复的电子邮箱

【LeetCode】196. 删除重复的电子邮箱

作者: Shenjiming | 来源:发表于2018-08-23 17:53 被阅读199次

LeetCode数据库题目

题目

编写一个 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  |
+----+------------------+

思路

  1. 查询目标:删除一条记录
  2. 查询范围:Person表
  3. 查询条件:删除所有重复的电子邮箱 ,重复的邮箱里只保留Id最小的哪个。
    显然,通过这个查询条件可以提取出来两条and关系的条件:
    (1)找出所有重复的电子邮箱(2)删除Id大的重复邮箱;
    对于条件(1),需要判断出所有重复的电子邮箱,即p1.Email = p2.Email
    对于条件(2),需要判断重复邮箱中Id较大的:p1.Id > p2.Id

解答

delete 
    p1 
from 
    Person p1,
    Person p2 
where 
    (p1.email = p2.email) and (p1.id > p2.id)

相关文章

网友评论

      本文标题:【LeetCode】196. 删除重复的电子邮箱

      本文链接:https://www.haomeiwen.com/subject/hadmiftx.html