如何在主表更新时保持表的自连接更新?

时间:2019-03-25 16:30:54

标签: mysql

我有一条带有自我联接的update语句,如下代码所示。本来应该从更新的列中获取值,但我注意到a1上的更新未反映在加入的a2上。

UPDATE test.cashbook a1 
inner join test.cashbook a2 on a2.id = (CASE WHEN a1.id>1 then a1.id-1 
END)
SET a1.balanceBroughtFoward = a2.balanceCarriedDown, 
    a1.totalCash = a2.balanceCarriedDown + ifnull(a1.cashSale, 0), 
    a1.balanceCarriedDown = ifnull(a1.totalCash, 0) -(ifnull(a1.Lodgement, 0) + ifnull(a1.Expenses, 0))
    where a1.id > 1

我期望的结果是将上一行的balanceCarriedFoward作为我的当前行balanceBroughtFoward

这可能是需要将自身与a2联接到同一张表,但是因为只有第一行(a1.id = 1)在联接之前具有balancecarriedFoward,因此仅第二行尽管在原始表(a1的后续行上更新了a1,但更新命令在更新过程中更新了balanceCarriedFoward,但我猜这个值未反映在自联接表中({{ 1}}),因此为a2给出null值,其中row为> 2。

由于只能使用MySQL 5.6,该如何解决?

1 个答案:

答案 0 :(得分:0)

我使用了一个变量来实现将a2a1连接的需求。下面的代码。

SET bc:= 0 UPDATE test.cashbook Set balanceBroughtFoward = bc, balanceCarriedFoward = (bc:= totalCash - (Lodgement + Expenses) )

上面的代码有效,但是现在我想将update语句放入触发器中。当我尝试它给出语法错误。此时是库存。