我有一个大量的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