繁体   English   中英

MySQL触发器有什么问题

[英]What is wrong MySQL Trigger

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服务器版本相对应的手册以获取正确的语法,以在第2行的'SELECT SUM(favouriteCount) as fav FROM question WHERE created_user = NEW.created'附近使用'SELECT SUM(favouriteCount) as fav FROM question WHERE created_user = NEW.created'

如何解决?

问题表图片

排名表图片

您不能将类似的聚合函数用于触发器。 但是您可以将逻辑移到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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM