今天在刷LeetCode第196题,删除重复的电子邮箱的时候
delete from Person p1
where p1.id not in (
select min(id) as id from Person group by email
)
上述sql会报错:You can't specify target table 'Person' for update in FROM clause
经过查询资料,原因是
MySQL不允许在同一查询中同时从一个表中读取并对其进行更新。这是为了防止同一查询产生不一致的结果。这个错误通常出现在你尝试在UPDATE语句中使用FROM子句来引用正在更新的表。
解决方案
将子查询改为临时表即可,如下:
delete from Person p1
where p1.id not in (
select id from (select min(id) as id from Person group by email) p
)
如果我的文章对你有帮助,就点个赞吧!!!