我有一条带有自我联接的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,该如何解决?
答案 0 :(得分:0)
我使用了一个变量来实现将a2
与a1
连接的需求。下面的代码。
SET bc:= 0
UPDATE test.cashbook
Set balanceBroughtFoward = bc, balanceCarriedFoward = (bc:= totalCash - (Lodgement + Expenses) )
上面的代码有效,但是现在我想将update语句放入触发器中。当我尝试它给出语法错误。此时是库存。