196. 删除重复的电子邮箱
题目描述
编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。
Id | |
---|---|
1 | john@example.com |
2 | bob@example.com |
3 | john@example.com |
Id 是这个表的主键。
例如,在运行你的查询语句之后,上面的 Person 表应返回以下几行:
Id | |
---|---|
1 | john@example.com |
2 | bob@example.com |
代码实现
delete from Person
where Id not in (select P.Id
from (select min(Id) Id from Person group by Email) P
)
代码分析
(select P.Id
from (select min(Id) Id from Person group by Email) P
)
作用是先根据Email分组,找出每个Email中最小的Id。
找出来的这些Id是不删除的,其他要删除,所以使用not in