关于mysql中 1093 - You can‘t specify target table ‘XXXX‘ for update in FROM clause, Time: 0.001000s

作者写SQL时遇到对同一张表先查询再将查询结果作为条件修改该表,出现1093报错,即无法在FROM子句中为更新指定目标表。网上推荐的解决方案是添加中间表,将查询结果放入临时表,修改时访问临时表数据。

自己给自己挖坑真是可怕,写sql时碰见这么一个问题,仔细想想,自己都想打死自己…………

以下是我的sql,先暂且不说为啥这么写。我想表达的意思是:对同一张表进行操作,先查询,再将查询出来的数据作为条件去修改这张表,会报错 1093 - You can’t specify target table ‘XXXX’ for update in FROM clause, Time: 0.001000s。意思是说:无法在FROM子句中为更新指定目标表。类似sql如下:
在这里插入图片描述
那么,为什么会出现这一种情况呢?

我看网上有好多人推荐解决方案是在这两张表中间加一张中间表。如下:
在这里插入图片描述
这种添加中间表的解决方案,类似把从schedule表中查出来的id放到一张临时表a中,修改的时候访问临时表数据进行操作,就像操作了两张表。而并非在同一张表中边查询,边修改。在mysql中貌似不能操作一张表同时进行查询删除。

最后,再对比我之前写的sql……不忍直视……

仔细想想,嵌套了那么多层和这个sql有什么区别呢?自己绕了一大圈还把自己给绕进去了。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值