【LeetCode 简单题】49-删除重复电子邮箱

声明:

今天是第49道题。编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除

(手动比心ღ( ´・ᴗ・` ))

正文

题目:编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。

+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | [email protected] |
| 2  | [email protected]  |
| 3  | [email protected] |
+----+------------------+
Id 是这个表的主键。

例如,在运行你的查询语句之后,上面的 Person 表应返回以下几行:

+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | [email protected] |
| 2  | [email protected]  |
+----+------------------+

解法1。不用两表join,直接用where判断比较,耗时1022 ms, 在Delete Duplicate Emails的MySQL提交中击败了84.39% 的用户,代码如下。

delete p1 from Person p1, Person p2 where p1.Email = p2.Email and p1.Id > p2.Id

解法2。先两表join,所以会耗时更多,然后再选择删除Id值更大的样本行,耗时1358 ms, 在Delete Duplicate Emails的MySQL提交中击败了43.57% 的用户,代码如下。

delete p1 from Person p1 join Person p2 on p1.Email = p2.Email where p1.Id > p2.Id

结尾

解法1、解法2:https://yq.aliyun.com/articles/341594

猜你喜欢

转载自blog.csdn.net/weixin_41011942/article/details/83269276