有人可以解释如何编写更新查询以更新表“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
任何帮助都非常感谢。
你可以使用update
和join
:
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不保证表达式的评估顺序。
但是,这不是你提出的问题。如果您希望修复查询,请询问包含样本数据和所需结果的新问题。