我有一个非规范化数据库,其中其他表的总点数包含在驱动程序表中。我想在更新表所在的点时更新表驱动程序的总点数。
像这样:
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;