当前位置: 首页 > news >正文

MySQL实现同一语句中先查后改

MySQL中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。 例如下面这个sql:

delete from tbl where id in 
(
        select max(id) from tbl a where EXISTS
        (
            select 1 from tbl b where a.tac=b.tac group by tac HAVING count(1)>1
        )
        group by tac
)

改写成下面就行了:

代码如下:

delete from tbl where id in 
(
    select a.id from 
    (
        select max(id) id from tbl a where EXISTS
        (
            select 1 from tbl b where a.tac=b.tac group by tac HAVING count(1)>1
        )
        group by tac
    ) a
)

也就是说将select出的结果再通过中间表select一遍,这样就规避了错误。注意,这个问题只出现于mysql,mssql和Oracle不会出现此问题。

You can't specify target table for update in FROM clause含义:不能在同一表中查询的数据作为同一表的更新数据。

例如:

我想查询t_user_asset的余额加上50000作为更新字段f_cashAmount的值,这样写是不行的。

UPDATE t_user_asset SET f_cashAmount =   
    (  
     SELECT (ua.f_cashAmount+50000) cashAmount FROM t_user_asset ua WHERE ua.f_userId = 290  
  )  
WHERE f_userId = 290  

修改成以下写法就行,意思就是变个方向,在select外边套一层,让数据库认为你不是查同一表的数据作为同一表的更新数据:

UPDATE t_user_asset SET f_cashAmount =   
(  
  SELECT ub.cashAmount FROM  
        (  
             SELECT (ua.f_cashAmount+50000) cashAmount FROM t_user_asset ua WHERE ua.f_userId = 290  
        ) ub  
)  


WHERE f_userId = 290

以上问题只针对mysql数据库

http://www.dtcms.com/a/10884.html

相关文章:

  • Stable diffusion的SDXL模型,针不错!(含实操)
  • Python爬取城市空气质量数据
  • 软件测试--第十章 测试需求分析与测试计划
  • Python pandas openpyxl excel合并单元格,设置边框,背景色
  • ARM32开发--PWM通道输出
  • python基础 002 - 1 基础语法
  • pytest+requests+allure自动化测试接入Jenkins学习
  • Python语言在金融领域的应用探索
  • 第7章 用户输入和 while 循环
  • 调用华为API实现语音合成
  • 常见数据编码方式
  • C/C++ 进阶(6)红黑树
  • day35|1005.K次取反后最大化的数组和 134. 加油站135. 分发糖果
  • SSRF 漏洞实践:端口扫描与任意文件读取
  • 【Python列表解锁】:掌握序列精髓,驾驭动态数据集合
  • 即时设计工具对决:Figma、Sketch与XD的优劣比较
  • 四维轻云|支持多源数据融合、城市级实景三维模型展示
  • Eureka和Nacos有哪些区别?
  • 项目:双人五子棋对战-对战模块(6)
  • ChatGPT
  • 评估聚类效果
  • MySQL提权之UDF提权
  • 假期已结束,大家都开始上班了吗
  • sqli-labs 靶场 less-11~14 第十一关、第十二关、第十三关、第十四关详解:联合注入、错误注入
  • [word] word如何清除超链接 #媒体#笔记#知识分享
  • NSSCTF-Web题目5
  • Faiss assertion ‘err == cudaSuccess‘ failed in void faiss::gpu:runL2Norm()
  • LangChain开发【NL2SQL】应用
  • Web前端管理系统项目:深度解析与实现之道
  • ROS使用手柄/cmd_vel无输出