A+
You can’t specify target table ‘xxx’ for update in FROM clause-mysql报错
标签: mysql 最后编辑:2020年6月22日
起因:在批量删除数据的时候报错You can’t specify target table ‘xxx’ for update in FROM clause,一开始没有考虑到不能再一条SQL里面同时查询和更新同一张表的数据,所以才导致报错。
报错原因:不能在一条sql语句中查询相同表的某些值,然后再更新表或者删除表。
解决办法:利用中间表包裹查询出来的数据之后再进行更新或者删除。
更新表错误示范:
更新表: update a表 set name = "马大哈" where id in (select id from a表 where id is not null)
更新表正确示范:
更新表: update a表 set name = "马大哈" where id in (select id from (select id from a表 where id is not null) b表 )
删除表错误示范:
删除表: delete from a表 where id in (select id from a表 where id is not null)
删除表正确示范:
delete from a表 where id in (select id from (select id from a表 where id is not null)b表 )
上面的示范都是采用B表当中间表来更新和删除,这样就避免在一条SQL里面同时查询和删除同一张表的数据。
说:来学习一下,应该用得上