编写一个 SQL 删除语句来 删除 所有重复的电子邮件,只保留一个id最小的唯一电子邮件。
以 任意顺序 返回结果表。 (注意: 仅需要写删除语句,将自动对剩余结果进行查询)
表: Person
+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | email | varchar | +-------------+---------+ id是该表的主键列。 该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。
示例
输入: 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。
解析
注意,题目要的是删除不是查询,如果查询的话,用 distinct 就可以了。
代码示例
delete p1 from Person p1, Person p2 where p1.Email = p2.Email and p1.Id > p2.Id;
执行用时:885 ms, 在所有 MySQL 提交中击败了 40.28% 的用户.
本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/409