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

文章目录

  • 1 题目描述
  • 2 解题思路
    • 2.1 代码实现

1 题目描述

表: Person

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| email       | varchar |
+-------------+---------+

id 是该表的主键列(具有唯一值的列)。
该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。

编写解决方案 删除 所有重复的电子邮件,只保留一个具有最小 id 的唯一电子邮件, 请注意你应该编写一个 DELETE 语句而不是 SELECT 语句

运行脚本后,显示的答案是 Person 表。驱动程序将首先编译并运行您的代码片段,然后再显示 Person 表。Person 表的最终顺序 无关紧要

返回结果格式如下示例所示。

示例 1:

输入:
Person 表:

+----+------------------+
| id | email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
| 3  | john@example.com |
+----+------------------+

输出:

+----+------------------+
| id | email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
+----+------------------+

解释: [email protected] 重复两次。我们保留最小的Id = 1

2 解题思路

  1. 使用 inner join,形成笛卡尔积
  2. 如果 email 相同,但是id不同说明有重复
  3. email 相同的, 需要把 id 大的删除,从而保留小id的数据

2.1 代码实现

  1. Person p1 inner join Person p2 on p1.email = p2.email, Person表内联自己, 查询 email 相同的数据
    LeetCode--196. 删除重复的电子邮箱_第1张图片
    查询出来的数据 2, 3, 4 行是同一条数据关联自己
  2. where p1.id > p2.id 从 eamil 相同数据中筛选出不是同一条数据, 且 id 大的数据
    image.png
  3. delete p1 from Person p1 指定删除 p1 表中的数据

最终代码实现

delete p1 from Person p1 inner join Person p2 on p1.email = p2.email where p1.id > p2.id

你可能感兴趣的:(MySQL,LeetCode,leetcode,mysql)