MySQL使用Select更新查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL使用Select更新查询相关的知识,希望对你有一定的参考价值。

有人可以解释如何编写更新查询以更新表“abcd”中的列“newBalance”与以下查询中的余额的O / P?

我想使用以下查询更新newBalance列,并为每行计算余额。

SELECT id
     , inAmt
     , outAmt
     , @prev := if(id = 1, @prev := @curBalance , @prev + (@prevOut-@prevIn)) as balance
     , @prevIn :=inAmt
     , @prevOut := outAmt 
  from (select @prev := 0) as i
     , abcd 
 order 
    by id

任何帮助都非常感谢。

答案

你可以使用updatejoin

update abcd join
       (select id, inAmt, outAmt,
               @prev := if(id = 1, @prev := @curBalance , @prev + (@prevOut-@prevIn)) as balance,
               @prevIn := inAmt,
               @prevOut := outAmt
        from (select @prev := 0) as i cross join
             abcd
        order by id
       ) x
       on abcd.id = x.id
    set abcd.newbalance = x.balance;

总而言之,您的查询绝对不能保证工作,并且可能随时失败。您在一个表达式中使用变量并在另一个表达式中分配它们。 mysql不保证表达式的评估顺序。

但是,这不是你提出的问题。如果您希望修复查询,请询问包含样本数据和所需结果的新问题。

以上是关于MySQL使用Select更新查询的主要内容,如果未能解决你的问题,请参考以下文章

05 MySQL之查询插入更新与删除

MYSQL 更新与 WHERE SELECT 子查询错误

mysql:使用子查询更新,

mysql update select 从查询结果中更新数据

如何将带有子查询的 MySQL select 语句转换为同一张表的更新语句?

MySQL记录操作