0
USE test;
CREATE TRIGGER AvgUpdateTrigger AFTER INSERT ON test.score
FOR EACH ROW
BEGIN
INSERT INTO test.average (test.average.TestID, test.average.TestAvg)
(SELECT test.score.TestID, avg(test.score.ScoreValue) FROM test.score GROUP BY test.score.TestID)
ON DUPLICATE KEY 
UPDATE test.average.TestAvg = (SELECT avg(test.score.ScoreValue) FROM test.score WHERE test.score.TestID = test.average.TestID GROUP BY test.score.TestID);
END;

im trying to update one table(average) when another one gets changed(score) it is telling me to add a semicolon but as you can see there is one there allready

Sir V
  • 31
  • 7

1 Answers1

0

If a trigger (or any stored procedure) contains only one statement, you don't need BEGIN and END:

CREATE TRIGGER AvgUpdateTrigger AFTER INSERT ON test.score
FOR EACH ROW
    INSERT INTO test.average (TestID, TestAvg)
        SELECT test.score.TestID, avg(test.score.ScoreValue)
        FROM test.score
        GROUP BY test.score.TestID
        ON DUPLICATE KEY UPDATE
            test.average.TestAvg = VALUES(TestAvg);

I also replaced the subquery with VALUES(TestAvg), since this value has already been selected.

Paul Spiegel
  • 30,925
  • 5
  • 44
  • 53