关于MySql update语句不能用子查询的解决办法
2023-02-18 16:45:18 时间
使用MySql数据库语法操作update时,第一时间想到的是一下写法:
UPDATE purchase_request_detail SET convert_to_voucher_id=2, convert_to_voucher_type='inventory-voucher'
WHERE detail_id IN (select detail_id from purchase_request_detail where request_id=1 and item_id=1) ;
但是这个时候就会报错:
You can't specify target table 'xxx' for update in FROM
MySql的update的一些特点:
1、update 时,更新的表不能在set和where中用于子查询;
2、update 时,可以对多个表进行更新(Sql Server不行);
如:
update table_a A,table_b B set A.B_ID=B.ID ,B.A_ID=A.ID;
3、update后面可以做任意的查询,这个作用等同于FROM;
所以MySql update是不允许使用子查询的,正确写法是:
UPDATE purchase_request_detail AS table_1
INNER JOIN (select detail_id from purchase_request_detail where request_id=1 and item_id=1)
AS table_2 SET convert_to_voucher_id=2, convert_to_voucher_type='inventory-voucher' WHERE table_1.detail_id = table_2.detail_id;
相关文章
- 还重构?就你那代码只能铲了重写!
- 工作3年,看啥资料能月薪30K?
- 组内分享,画架构图的一些知识整理
- 给你一台服务器,你能把你写的代码部署到线上吗?
- 刚火了的中台转头就拆,一大波公司放不下又拿不起来!
- 工作两年简历写成这样,谁要你呀!
- 讲道理,只要你是一个爱折腾的程序员,毕业找工作真的不需要再花钱培训!
- 刚毕业不久,接私活赚了2万块!
- 北漂码农的我,把在大城市过成了屯子一样舒服,哈哈哈哈哈!
- 码农会锁,synchronized 对象头结构(mark-word、Klass Pointer)、指针压缩、锁竞争,源码解毒、深度分析!
- 都说搭博客简单,鬼知道后端程序员要经历什么!
- 炸!1024我的故事,一个写了两年博客的大厂码农!
- 几百行代码写个Mybatis,原理搞的透透的!
- 每个程序员都该有个自己的博客,分享我的四种博客搭建教程!
- 一次代码评审,差点过不了试用期!
- 数学,离一个程序员有多近?
- 程序员为什么热衷于造轮子,升职加薪吗?
- 牛掰,在IDEA中,你可以安装小傅哥写的插件了!
- 得物(毒)APP,8位抽奖码需求,这不就是产品给我留的数学作业!
- 90%的程序员,都没用过多线程和锁,怎么成为架构师?