243
文章
15
说说
411
评论
297029
访问

个人博客网站:prettywordpress.com(吃饭用大碗的程序猿)

最新评论
qq_avatar
2年前,”四五设计网”在《如何使用百度云CDN优化wordpress速度》
说:来学习一下,应该用得上
qq_avatar
2年前,” ”在《友情链接》
说:像不能用了更新地址为 https://aba.pet/wp-content/uploads/2022/05/favicon-1.gif
qq_avatar
3年前,”Alex”在《终于找到拖慢网站的罪魁祸首》
说:优化这么快,你有想过我们的感觉?
qq_avatar
3年前,”ヘル”在《码农=新生代农民工》
说:打卡@[huaixiao]
qq_avatar
3年前,”肋巴骨”在《Win10系统桌面一直闪屏自动刷新怎么办》
说:不错啊,这是谁写的教程,真棒
A+

You can’t specify target table ‘xxx’ for update in FROM clause-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里面同时查询和删除同一张表的数据。

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

发表一下你的评论呗

回复评论代表你同意网站的 隐私政策

... 友情提示 请保留版权标识
复制成功!
目录