触发从另一个表MySQL更新总和

时间:2016-06-02 12:07:51

标签: mysql

我有一个数据库,可以跟踪我所在的联赛的统计数据和平均值。我有一个结果表和一个排名表,我将结果中的“点数”添加到排名中的整体“积分”。我目前有一个查询,它成功地将结果中的点添加到排名表中。但是,当我添加新结果时,排名不会更新。

这是我的查询,我用它来评估从结果到积分的点数。

UPDATE standings s,( SELECT team_id, sum(points)  as mysum
FROM results GROUP BY team_id) as r
SET s.points = r.mysum
WHERE s.team_id = r.team_id;

我正在尝试使用触发器自动更新整体点数。我是触发器的新手,在运行以下内容时收到语法错误#1064。

CREATE TRIGGER standingsUpdate
AFTER INSERT ON results
FOR EACH ROW
BEGIN
    UPDATE standings s,( SELECT team_id, sum(points)  as mysum
    FROM results GROUP BY team_id) as r
    SET s.points = r.mysum
    WHERE s.team_id = r.team_id;
END

有人能够指出我正确的方向吗?有没有更好的方法来实现这一目标?

谢谢, - 杰森

1 个答案:

答案 0 :(得分:0)

您的触发器应该引用 new

DELIMITER $$

CREATE TRIGGER standingsUpdate
AFTER INSERT ON results
FOR EACH ROW
BEGIN
    UPDATE standings s
        SET s.points = s.points + new.points
    WHERE s.team_id = new.team_id;
END;$$
DELIMITER ;
但是,要小心。您还应该有updatedelete次触发器。

如果你可以通过在需要时聚合点来做到这一点,那么这是一个更好的解决方案(或者至少更简单)。