2016-04-30 2 views
0
CREATE TRIGGER updateRank BEFORE UPDATE ON question 
SELECT SUM(favouriteCount) as fav FROM question WHERE created_user = NEW.created_user 
FOR EACH ROW 
    BEGIN 
     UPDATE users SET rank = (SELECT id FROM Rank WHERE fav > range) WHERE id=NEW.created_user 
    END 

SQL構文にエラーがあります。あなたのMariaDBサーバのバージョンに対応するマニュアルをチェックして、右の構文を使用して'SELECT SUM(favouriteCount) as fav FROM question WHERE created_user = NEW.created'を2行目に近づける何が問題なのですか?MySQLのトリガー

どのように修正するのですか?

Question table image

Rank table image

答えて

0

あなたは、トリガーのためにそのように集計関数を使用することはできません。しかし、ロジックをUPDATEに移動することができます。

CREATE TRIGGER updateRank BEFORE UPDATE ON question 
FOR EACH ROW 
    BEGIN 
     UPDATE users u CROSS JOIN 
       (SELECT SUM(favouriteCount) as fav 
       FROM question 
       WHERE created_user = NEW.created_user 
       ) f 
      SET rank = (SELECT r.id FROM Rank r WHERE f.fav > r.range) 
      WHERE u.id = NEW.created_user; 
    END; 
+0

#1064 - SQL構文に誤りがあります。あなたのMariaDBサーバのバージョンに対応するマニュアルをチェックして正しい構文が近くにあることを確認してください '10行目 –

+0

セミコロンを正しく定義するには 'delimiter'文が必要です。 –

関連する問題