关于MySql update语句不能用子查询的解决办法

关于MySql update语句不能用子查询的解决办法

  • 使用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的一些特点:

  • update 时,更新的表不能在set和where中用于子查询;

  • update 时,可以对多个表进行更新(Sql Server不行);

  • 如:

  • update table_a A,table_b B set A.B_ID=B.ID ,B.A_ID=A.ID;

  • 所以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.d

-----------------------------------------------------------------------------------

offer突击训练营简介:

1:针对不知道怎么面试,面试没有信心的小伙伴,我们会给你一个offer保障。

2:我们会监督你15-20天内把面试体系技术点掌握至少7成,这样足够你去找到满意的工作了。

3:我们是面向面试学习指导,不会带你们去写代码,会把项目真实开发的迭代过程和技术细节如何实现业务功能都详细教清楚,你能在面试中流畅表达清楚就行了,项目经验你不用担心(技术老师提供的真实项目经验肯定拿的出手),自己学和别人带着系统学,效率完全不一样。

详情请点击这里offer突击训练营,给你一个offer的保障,求职跳槽的看过来!

相关推荐
fensioakq—qqq2 分钟前
Spring框架的学习SpringMVC(1)
java·开发语言·后端·学习·spring
yava_free8 分钟前
通过IoT边缘ModuleSDK进行进程应用的开发介绍?
java·ide·pycharm
小郑[努力版]9 分钟前
Nginx常用操作
java·python·中间件
倾听一世,繁花盛开12 分钟前
Java语言程序设计——篇二(1)
java·开发语言·eclipse
华子w90892585919 分钟前
60页论文参考:基于Java+SpringMvc+Vue技术的智慧校园系统设计与实现
java·开发语言·vue.js·论文阅读
oscube26 分钟前
Apache AGE中的图
数据库·apache
科学的发展-只不过是读大自然写的代码28 分钟前
qt播放视频
数据库·qt·音视频
激昂~逐流30 分钟前
Qt使用sqlite数据库及项目实战
数据库·qt·sqlite·学生信息管理系统
java66666888830 分钟前
使用Java构建一个高性能的消息队列系统
java·开发语言·linq
m0_5719575835 分钟前
Java | Leetcode Java题解之第219题存在重复元素II
java·leetcode·题解