使用Select的MySQL更新查询

时间:2019-03-09 14:05:23

标签: mysql sql sql-update

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

我想使用以下查询为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

我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分: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不保证表达式的求值顺序。

但是,这不是您提出的问题。如果您要固定查询,请提出一个新问题,其中包含示例数据和所需结果。