0%

196.删除重复的电子邮箱

1. group by

因为要求保留每种邮箱中最小的Id,因此只需要根据邮箱分组,筛选出每组邮箱最小的Id,然后删除不是最小的Id即可。

1
2
3
4
5
6
7
8
delete from Person
where Id not in (
select t.Id from (
select min(Id) as Id
from Person
group by Email
) t
);

2. 自连接

使用delete t1 from t1, t2 where..语句,而不是delete from t1 where...语句。
这条语句不是从t1和t2表连接得到的临时表中删除数据,而是根据where的条件从删除t1中的数据,from只是方便where的条件。

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