我有一個大量的DATETIME
記錄計算TIMEDIFF
更新查詢:MYSQL:如何更新多個列具有相同的值
UPDATE eventlog SET downtime = TIMEDIFF(up_stamp,down_stamp);
這工作,但我需要設置這個TIMEDIFF
值到另一列以及downtime
。像這樣的事情(不工作):
UPDATE eventlog SET downtime, downtime_adj = TIMEDIFF(up_stamp,down_stamp);
我知道我可以像這樣將它們組合起來:
UPDATE eventlog SET downtime = TIMEDIFF(up_stamp,down_stamp), downtime_adj = TIMEDIFF(up_stamp,down_stamp);
但是,這將重新計算,同時DIFF 2X多次需要。什麼是最有效的方式來做到這一點?
此解決方案是否阻止@ a1ex07提出的可能的左右評估問題?我發現了另一個例子:http://bugs.mysql.com/bug.php?id=52861。 – kiwisan 2014-12-03 19:46:50
從文檔:「作爲一般規則,除了在SET語句中,_you不應該爲用戶變量賦值並讀取同一語句中的值。」還有,「對於其他語句,如SELECT,你可能會得到你期望的結果,但是這並不能保證。「 – cepradeep 2014-12-04 02:45:03
也就是說,這個特殊的陳述似乎是從」Maria-DB 5.5.36「中的從左到右的評估。例如,類似'UPDATE eventlog SET downtime = @x,downtime_adj = @x:= TIMEDIFF(up_stamp,down_stamp)'的結果是'downtime'列的'NULL'值。我會說沒有未定義的行爲(我知道)。最好的選擇是在你的數據庫上測試它。 – cepradeep 2014-12-04 02:55:26