如何在更新主表时更新表的自联接?

问题描述 投票:1回答:1

我有一个更新语句,下面的代码中显示了自联接。我应该从更新的列中获取值,但我注意到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,但我猜这些值没有反映在自联接表(a2)中,因此为a1.balancbroughtFoward提供了空值,其中row> 2。

我怎么能解决这个问题,因为我只能使用MySQL 5.6?

mysql
1个回答
0
投票

我使用变量来实现将a2加入a1的需要。代码如下。

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

上面的代码工作但我现在想把update语句放在触发器中。我尝试时会出现语法错误。在这一点上库存。

© www.soinside.com 2019 - 2024. All rights reserved.