起因:在批量删除数据的时候报错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里面同时查询和删除同一张表的数据。

发表评论

电子邮件地址不会被公开。 必填项已用*标注