243
文章
15
说说
818
评论
615610
访问

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

最新评论 纳尼!怎么还没有人在本站点留言(ó﹏ò。)
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 国际许可协议

发表一下你的评论呗

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

... 友情提示 请保留版权标识
复制成功!
目录
今日公告
生命是一团欲望,欲望不能满足便痛苦,满足便无聊,人生就在痛苦和无聊之间摇摆----叔本华
站长技能树
java
60%
javascript
55%
c
10%
typescript
50%
python
10%
免费咨询公众号