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