MySQL使用Select更新查询

问题描述 投票:-1回答:1

有人可以解释如何编写更新查询以更新表“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

任何帮助都非常感谢。

mysql sql sql-update
1个回答
0
投票

你可以使用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不保证表达式的评估顺序。

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

© www.soinside.com 2019 - 2024. All rights reserved.