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

Joe*_*oel 3 mysql sql 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)
Run Code Online (Sandbox Code Playgroud)

假设在执行更新之前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语句中使用目标表

Qua*_*noi 11

UPDATE mytable, (
  SELECT @loop := MAX(col1)
  FROM
    mytable
  ) o
SET col1 = (@loop := @loop + 1)
Run Code Online (Sandbox Code Playgroud)

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

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

UPDATE mytable
SET col1 = col2 + 1
WHERE col1 > col2 
Run Code Online (Sandbox Code Playgroud)

永远不会结束