想象一下以下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语句中使用目标表
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
永远不会结束