2

こんにちは私は別のテーブルの挿入でテーブルを更新するためにmysqlトリガーを使用しています

このトリガーは正常に機能します

CREATE TRIGGER `update_pupil_subject` AFTER INSERT ON `pupil_marks`
FOR EACH ROW  
BEGIN
   UPDATE  pupil_subjects  SET NumberOfStudens = NumberOfStudens + 1  WHERE NEW.SubjectID = SubjectID;
END$$

しかし、これはエラーになります

CREATE TRIGGER `update_pupil_subject` AFTER INSERT ON `pupil_marks`
FOR EACH ROW  
BEGIN
   UPDATE  pupil_subjects  SET NumberOfStudens = NumberOfStudens + 1 , AverageMarks = (SELECT AVG(Marks) FROM pupil_marks WHERE NEW.StudentID = StudentID ) WHERE NEW.SubjectID = SubjectID;
END$$

ここに画像の説明を入力してください

これを正しく書く方法、助けてください。前もって感謝します 。

4

2 に答える 2

1

どうやら、サブクエリが使用されたときに問題がありました:

SQLステートメントを分割してみてください。

DELIMITER $$

CREATE TRIGGER `update_pupil_subject`
   AFTER INSERT
   ON `pupil_marks`
   FOR EACH ROW
BEGIN
   DECLARE avg_marks   float;

   SELECT AVG(Marks)
     INTO avg_marks
     FROM pupil_marks
    WHERE NEW.SubjectID = SubjectID;

   UPDATE pupil_subjects
      SET NumberOfStudens = NumberOfStudens + 1, AverageMarks = avg_marks
    WHERE NEW.SubjectID = SubjectID;
END
$$

編集:使用

SHOW TRIGGERS WHERE `table` = 'pupil_marks';

で定義されているすべてのトリガーを取得しますpupil_marks。すべてのアクションを単一のトリガーでカバーできるため、イベントに複数のトリガーを設定することはできません。

注:特定の主題に関するものだと思うAVG(Marks)ので、それに応じてトリガー定義を変更しました。

于 2013-03-23T08:56:58.253 に答える
1

トリガー内で変数を宣言し、サブクエリで割り当てます

avg_mark integerdefault0を宣言します。set avg_mark:=(SELECT AVG(Marks)FROMpupil_marks WHERE NEW.StudentID = StudentID);

次に、更新ステートメントで変数「avg_mark」を使用します...動作する可能性があります...

そうでない場合は、phpmyadminsqlボックスのすぐ下にある区切り文字を確認してください。「$$」である必要があります

于 2013-03-23T09:31:46.000 に答える