MYSQL:如何更新具有相同值的多个列
我有一个更新查询,它对大量MYSQL:如何更新具有相同值的多个列,mysql,Mysql,我有一个更新查询,它对大量DATETIME记录计算TIMEDIFF: 更新事件日志集停机时间=TIMEDIFF(向上戳,向下戳) 这是可行的,但我需要将此TIMEDIFF值设置为另一列以及停机时间。类似这样的东西(不起作用): 更新事件日志集停机时间,停机时间调整=TIMEDIFF(向上戳,向下戳) 我知道我可以这样组合它们: updateeventlog SET down=TIMEDIFF(up\u stamp,down\u stamp),down\u adj=TIMEDIFF(up\u st
DATETIME
记录计算TIMEDIFF
:
更新事件日志集停机时间=TIMEDIFF(向上戳,向下戳)代码>
这是可行的,但我需要将此TIMEDIFF
值设置为另一列以及停机时间
。类似这样的东西(不起作用):
更新事件日志集停机时间,停机时间调整=TIMEDIFF(向上戳,向下戳)代码>
我知道我可以这样组合它们:
updateeventlog SET down=TIMEDIFF(up\u stamp,down\u stamp),down\u adj=TIMEDIFF(up\u stamp,down\u stamp)代码>
但这将根据需要多次重新计算相同的时间差2x。做这件事最有效的方法是什么?我刚刚测试了这个,它似乎在我的mysql上工作:
UPDATE eventlog SET downtime = TIMEDIFF(up_stamp,down_stamp), downtime_adj = downtime;
停机时间
将使用timediff设置,停机时间_adj
将使用新的停机时间
作为其值。我刚刚测试了这个,它似乎在我的mysql上工作:
UPDATE eventlog SET downtime = TIMEDIFF(up_stamp,down_stamp), downtime_adj = downtime;
停机时间
将使用timediff设置,停机时间_adj
将使用新的停机时间
作为其值。我刚刚测试了这个,它似乎在我的mysql上工作:
UPDATE eventlog SET downtime = TIMEDIFF(up_stamp,down_stamp), downtime_adj = downtime;
停机时间
将使用timediff设置,停机时间_adj
将使用新的停机时间
作为其值。我刚刚测试了这个,它似乎在我的mysql上工作:
UPDATE eventlog SET downtime = TIMEDIFF(up_stamp,down_stamp), downtime_adj = downtime;
停机时间
将使用timediff设置,停机时间_adj
将使用新的停机时间
作为其值。似乎可以使用用户定义变量,这样timediff()
就不需要运行两次
试试这个:
UPDATE eventlog SET downtime = @x := TIMEDIFF(up_stamp,down_stamp), downtime_adj = @x;
以下是文件:
免责声明:
看到你的问题后,我碰巧读了起来。我不精通SQL
希望对您有所帮助。:-)
似乎可以使用用户定义的变量,这样就不必运行两次TIMEDIFF()
试试这个:
UPDATE eventlog SET downtime = @x := TIMEDIFF(up_stamp,down_stamp), downtime_adj = @x;
以下是文件:
免责声明:
看到你的问题后,我碰巧读了起来。我不精通SQL
希望对您有所帮助。:-)
似乎可以使用用户定义的变量,这样就不必运行两次TIMEDIFF()
试试这个:
UPDATE eventlog SET downtime = @x := TIMEDIFF(up_stamp,down_stamp), downtime_adj = @x;
以下是文件:
免责声明:
看到你的问题后,我碰巧读了起来。我不精通SQL
希望对您有所帮助。:-)
似乎可以使用用户定义的变量,这样就不必运行两次TIMEDIFF()
试试这个:
UPDATE eventlog SET downtime = @x := TIMEDIFF(up_stamp,down_stamp), downtime_adj = @x;
以下是文件:
免责声明:
看到你的问题后,我碰巧读了起来。我不精通SQL
希望这有助于:-)
文档中说“单表更新分配通常从左到右进行评估。”()。就我个人而言,我不会冒险假设“一般”意味着“总是”…文档说“单表更新分配通常从左到右进行评估。”()。就我个人而言,我不会冒险假设“一般”意味着“总是”…文档说“单表更新分配通常从左到右进行评估。”()。就我个人而言,我不会冒险假设“一般”意味着“总是”…文档说“单表更新分配通常从左到右进行评估。”()。就我个人而言,我不会冒险假设“一般”意味着“总是”…这个解决方案是否防止了@a1ex07警告的可能的左右评估问题?我发现了另一个例子:。从文档中可以看到:“作为一般规则,除了SET语句,您永远不应该为用户变量赋值并读取同一语句中的值。”还有,“对于其他语句,例如SELECT,您可能会得到预期的结果,但这并不能保证。”也就是说,在Maria DB 5.5.36
中,这个特殊的语句似乎是从左到右计算的。例如,类似于updateeventlog SET downlight=@x,downlight\u adj=@x:=TIMEDIFF(up\u stamp,down\u stamp)
的结果是downlight
列的NULL
值。我想说,没有办法绕过未定义的行为(据我所知)。最好的办法是在您的数据库上测试它。此解决方案是否可以防止@a1ex07警告的可能的左右评估问题?我发现了另一个例子:。从文档中可以看到:“作为一般规则,除了SET语句,您永远不应该为用户变量赋值并读取同一语句中的值。”还有,“对于其他语句,例如SELECT,您可能会得到预期的结果,但这并不能保证。”也就是说,在Maria DB 5.5.36
中,这个特殊的语句似乎是从左到右计算的。例如,类似于updateeventlog SET downlight=@x,downlight\u adj=@x:=TIMEDIFF(up\u stamp,down\u stamp)
的结果是downlight
列的NULL
值。我想说,没有办法绕过未定义的行为(据我所知)。最好的办法是在您的数据库上测试它。此解决方案是否可以防止@a1ex07警告的可能的左右评估问题?我发现了另一个例子:。从文档中可以看到:“作为一般规则,除了SET语句,您永远不应该为用户变量赋值并读取同一语句中的值。”还有,“对于其他语句,例如SELECT,您可能会得到预期的结果,但这并不能保证。”也就是说,在Maria DB 5.5.36
中,这个特殊的语句似乎是从左到右计算的。例如,类似于updateeventlog SET down=@x,down\u adj=@x:=TIMEDIFF(up\u stamp