目的:删除重复的邮件的数据,只保留保留最小id的一行。
表的结构
删除后的结果
思路:先按email分组取最小id,放入delete 语句的条件中。
报错SQl
DELETE FROM Person
WHERE id != (SELECT MIN(p.id) FROM Person p GROUP BY p.email)
原因:不能在同一个sql语句中,先select同一个表的某些值,然后再update这个表。就是一个表中不能有查询,又有更新。
解决办法:
select的结果再通过一个中间表select多一次,就可以避免这个错误
-- 一下通过A为中间表
DELETE FROM Person
WHERE id not IN (SELECT A.min_id FROM (SELECT MIN(id) as min_id FROM Person GROUP BY email) as A)
到此完美解决!