Представьте себе следующий 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: Использование целевой таблицы в операторе UPDATE во вложенном предложении FROM