mysql动态update语句,mysql – SQL:具有动态列值赋值的update语句

想象一下以下sql查询:

UPDATE MYTABLE

SET COL2 = (SELECT COL2 + 1 FROM (SELECT MAX(COL2) FROM MYTABLE) AS X)

WHERE ID IN (1,2,3,4,5)

假设在执行更新之前MAX(COL2)为1.

我的意图是,对于ID = 1的更新,COL2更新为’max(COL2)1′(即2),并且重新评估后续更新’MAX(COL2)1′,以便ID = 2 ,COL2 = 3,ID = 3,COL2 = 4等……

实际发生的是,对于所有行(ID = 1,2,3,4,5),COL2的值为2.

是否有一种聪明的方法可以在每次更新时重新评估MAX(COL2)1的值?我意识到这样做可能存在性能问题,但我很好奇!有没有更好的替代方案(不涉及多个更新语句)?

解决方法:

UPDATE mytable, (

SELECT @loop := MAX(col1)

FROM

mytable

) o

SET col1 = (@loop := @loop + 1)

你在这里遇到的是查询稳定性.

没有查询可以看到自己做出的更改,或以下查询:

UPDATE mytable

SET col1 = col2 + 1

WHERE col1 > col2

永远不会结束

标签:mysql,sql,sql-update

来源: https://codeday.me/bug/20190716/1473565.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值