在mysql中,执行更新或删除操作的时候,如果操作是在一个查询条件的结果集中,可能会出现这个错误。
案例
编写一个 SQL 查询,来删除 test_delete 表中所有重复的 手机号, 重复的手机号只保留id最小的那个。
出错的写法
DELETE from test_delete where id not in (
SELECT min(id) from test_delete GROUP BY phone
)
报错
正确的写法
DELETE from test_delete where id not in (
select a.minid from (
SELECT min(id) as minid from test_delete GROUP BY phone
)a
)
mysql不允许查询和更新操作在同一张表中进行;可以用一个查询把内部的查询包起来,这样就形成了一个中间表,mysql就认为查询和更新操作的不是同一张表。