我正在尝试开发一个脚本来更新表中的运行总计:
update transactions set running_total = (select sum(amount) from transactions t2 where t2.sequence_number <= transactions.sequence_number)
MySQL预计会显示错误您无法指定目标表&#39;事务&#39;用于FROM子句中的更新
如何重新编写此脚本不使用使用变量(即仅依赖连接等)
答案 0 :(得分:1)
您可以执行以下操作:
执行以下查询:
SELECT t.id, t.total,
(SELECT SUM(total) FROM transactions WHERE id <= t.id) AS running
FROM transactions t;
将输出存储在临时表中(此处为documentation)
编写更新查询,以更新此表中的记录
UPDATE transactions t
SET running_total = (SELECT running FROM temp WHERE id = t.id);
删除temp
表。
对于新的INSERT
,您可以在应用程序(或BEFORE INSERT
触发器)中编写逻辑,以在插入行之前计算运行总计。
这是SQL Fiddle。