次の 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ステートメントでターゲットテーブルを使用する