假設我有這個疑問:SQL UPDATE:在進一步列以前更新的列值
UPDATE TEST SET
a = a + 23,
b = (b+5)/a,
c = c + a + b
WHERE
d = 6
OR
d = 10
和列的初始值是
a = 0
b = 5
c = 10
請問查詢崩潰,因爲0
價值的a
(所以(b+5)/a
不會計算)或將已經有value = 23
。
一般問題是:在UPDATE statement
中,用於更新其他列的值是已更新列的原始值還是更新值?
使用的數據庫是否有區別? MySQL,SQL Server,Oracle,DB2 ......?
編輯
什麼將是對「右側」更新值的最佳做法是什麼?
子查詢將工作嗎?
如何解決多值更新的問題?子查詢應該返回只值1
UPDATE TEST SET
a = a + 23,
b = (b+5)/(SELECT a FROM TEST WHERE d = 6),
c = c + a + b
WHERE
d = 6
OR
d = 10
最好的做法是不要依賴更新後的值(不,子查詢不起作用),只使用你在那裏的值。 – Ryan
因此,我必須先提取這些值......這意味着更多查詢的執行時間...... – Perocat
在這種情況下,只需更新'b =(b + 5)/(a + 23),c = c +(a + 23)+((b + 5)/(a + 23))'。如果你的情況比這更復雜,請提供一個適當的例子,你可以使用變量。 – Ryan