当前位置: 首页 > 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数据库

相关文章:

  • 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
  • 纪念|“补白大王”郑逸梅,从藏扇看其眼光品味
  • 1101名优秀运动员拟保送,全红婵、黄雨婷、盛李豪在列
  • 伊朗港口爆炸最新事故调查报告公布,2名管理人员被捕
  • 上音校园春日花艺引路人打卡,阳台音乐会吹响《玫瑰人生》
  • 华尔兹转岗与鲁比奥集权:特朗普政府人事震荡背后的深层危机
  • 特朗普称将禁止伊朗石油买家与美国做生意