196. 删除重复的电子邮箱
编写一个 SQL 删除语句来 删除 所有重复的电子邮件,只保留一个id最小的唯一电子邮件。
以 任意顺序 返回结果表。 (注意: 仅需要写删除语句,将自动对剩余结果进行查询)
查询结果格式如下所示。
错误写法
delete from Person
where id not in
(select id from(SELECT min(id) from Person group by id)t)
报错信息:
You can't specify target table 'xxx' for update in FROM clause
错误原因
在MYSQL中,不能先Select一个表的记录,再按此条件Update和Delete同一个表的记录 解决方法:使用嵌套Select——将Select得到的查询结果作为中间表,再Select一遍中间表作为结果集,即可规避错误
正确写法:
delete from Person where id not in
(SELECT id FROM
(
SELECT MIN(ID) as id
FROM PERSON
GROUP BY EMAIL
)t)
正确写法II
DELETE p2
from Person p1
left join Person p2
on p1.email = p2.email and p1.id < p2.id