我有一个非规范化数据库,其中其他表的总点数包含在驱动程序表中。我想在更新表所在的点时更新表驱动程序的总点数。

像这样:

CREATE TRIGGER sanciones_trigger BEFORE UPDATE ON points
FOR EACH ROW
UPDATE drivers,
    (  SELECT pID,SUM(numpoints) AS total_points
        FROM drivers
        INNER JOIN points ON points.driverID = drivers.pID
        GROUP BY drivers.pID
    ) sum
SET drivers.total_points= sum.total_points
    WHERE drivers.pID = sum.pID;


但是我不能在触发器内更新。我也尝试过一个程序,但是我真的不知道该怎么做。

我该如何解决?

最佳答案

如果“点”表上有“数字点”,则可以通过触发器在每次更新时将增量添加到“驱动器”中。但是,如果您也要更改“ driverID”,则此操作将无效。请尝试以下方法。

这里的“ NEW”关键字为您提供了要更改的新值,“ OLD”关键字为您提供了表中存在的值。

CREATE TRIGGER sanciones_trigger BEFORE UPDATE ON points
FOR EACH ROW
UPDATE drivers
SET total_points= drivers.total_points + (NEW.numpoints - OLD.numpoints)
    WHERE pID = NEW.driverID;

10-08 15:12