我有一个更新语句,下面的代码中显示了自联接。我应该从更新的列中获取值,但我注意到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?
我使用变量来实现将a2
加入a1
的需要。代码如下。
SET bc:= 0
UPDATE test.cashbook
Set balanceBroughtFoward = bc, balanceCarriedFoward = (bc:= totalCash - (Lodgement + Expenses) )
上面的代码工作但我现在想把update语句放在触发器中。我尝试时会出现语法错误。在这一点上库存。