Py学习  »  DATABASE

使用select的mysql更新查询

user3066279 • 5 年前 • 1272 次点击  

有人能解释一下如何编写一个更新查询来更新表“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

任何帮助都是非常感谢的。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47983
 
1272 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Gordon Linoff
Reply   •   1 楼
Gordon Linoff    6 年前

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

不过,这不是你问的问题。如果要修复查询,请使用示例数据和所需结果提出新问题。