当前位置:  开发笔记 > 后端 > 正文

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

如何解决《SQL:具有动态列值赋值的update语句》经验,为你挑选了1个好方法。

想象一下以下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"的值"?我意识到这样做可能存在性能问题,但我很好奇!有没有更好的替代方案(不涉及多个更新语句)?

BTW:如果您想知道上面查询使用的语法(嵌套内部表),请参见此处:SQL:在嵌套FROM子句中的UPDATE语句中使用目标表



1> Quassnoi..:
UPDATE mytable, (
  SELECT @loop := MAX(col1)
  FROM
    mytable
  ) o
SET col1 = (@loop := @loop + 1)

你在这里遇到的是什么query stability.

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

UPDATE mytable
SET col1 = col2 + 1
WHERE col1 > col2 

永远不会结束

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有