You can‘t specify target table ‘表名‘ for update in FROM clause错误
短信预约 -IT技能 免费直播动态提醒
修改 MySQL 一些数据的时候,update 同表子查询筛选的数据,出现了如下错误:
#1093 - You can't specify target table 'd_no' for update in FROM clause
原因:在 MySQL文档中已经详细的指明了该问题。优化器默认会合并 derived table (实际上是一种特殊的subquery,它位于SQL语句中FROM子句里面,可以看做是一个单独的表)到外边的查询块,仅当强制具体化 derived table 时,这才有效。
解决方法:前两种比较推荐,不推荐考虑第三种和第四种
包装子查询
update a set status=1 where id in (select * from (select id from a where status is null) as b)
2、将子查询移动到待更新列表中
update a as A ,(select id from a where status is null) as B set status=1 where A.id = B.id
optimizer_switch 下的 derived_merge 设置为 off
update a set status=1 where id in (select id from a where status is null)
直接重写子查询,
来源地址:https://blog.csdn.net/m0_56166876/article/details/127581064
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341