想象一下下面的 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 的值?我意识到这样做可能会出现性能问题,但我仍然很好奇!有没有更好的选择(不涉及多个更新语句)?
顺便说一句:如果您想知道上述查询(嵌套内表)使用的语法,请参见此处:SQL:在嵌套 FROM 子句中的 UPDATE 语句中使用目标表