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

196. 删除重复的电子邮箱

作者: spark打酱油 | 来源:发表于2022-07-19 16:23 被阅读0次

1.题目描述

表: Person
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| email | varchar |
+-------------+---------+
id是该表的主键列。
该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。

编写一个 SQL 删除语句来 删除 所有重复的电子邮件,只保留一个id最小的唯一电子邮件。以 任意顺序 返回结果表。 (注意: 仅需要写删除语句,将自动对剩余结果进行查询)

查询结果格式如下所示。
示例 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 |
+----+------------------+
解释: john@example.com重复两次。我们保留最小的Id = 1。

2.解题思路

本题的解题思路是,先查出需要删除的数据,也就是Email字段相同,而id大的那一行数据。
需要先进行查出:删除数据
SELECT p1.* FROM employee p1 join employee p2 on p1.name = p2.name and p1.id > p2.id
然后进行使用 delete 进行删除上面条件的数据
补充知识:

  • 1.最基础的条件删除,如下所示
    DELETE FROM table_name where table_name.name='dell'
    还有一种按序删除的方式如下 DELETE FROM customers ORDER BY Name LIMIT 10
  • 2.MySQL DELETE语句使用INNER/left/right JOIN子句
    DELETE a FROM tablename AS a LEFT JOIN temp_name AS b ON a.ID = b.ID WHERE b.UserID > 0;
    DELETE a FROM tablename AS a LEFT JOIN temp_name AS b ON a.ID = b.ID WHERE b.ID IS not null;

本题使用的是方式2,进行解题的

3.代码

DELETE p1 FROM Person p1,
    Person p2
WHERE
    p1.Email = p2.Email AND p1.Id > p2.Id

相关文章

网友评论

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

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