SELECT SUM(列)INTO @variable在MySQL触发器中

时间:2015-07-17 06:20:41

标签: mysql triggers

SELECT SUM(column) INTO @variable FROM tabl2 WHERE column2 = NEW.column in MySQL update Trigger returns NULL

我的代码如下

CREATE TRIGGER `users_update` AFTER UPDATE ON `users`
 FOR EACH ROW BEGIN
    DECLARE profit DOUBLE DEFAULT 0;

    SELECT SUM(PROFIT) INTO @profit FROM trades WHERE LOGIN = new.LOGIN AND PROFIT > 0;

    UPDATE user_details SET profit = @profit WHERE LOGIN = new.LOGIN;
END;

然而,当单独执行相同的查询时,我得到数据。这真让我抓狂。请有人建议我哪里出错了?

2 个答案:

答案 0 :(得分:0)

尝试以下方法之一:

CREATE TRIGGER `users_update` AFTER UPDATE ON `users`
 FOR EACH ROW BEGIN
    DECLARE profit DOUBLE DEFAULT 0;

    SELECT @profit:=SUM(PROFIT) FROM trades WHERE LOGIN = new.LOGIN AND PROFIT > 0;

    UPDATE user_details SET profit = @profit WHERE LOGIN = new.LOGIN;
END;

Or if you want to use into:

CREATE TRIGGER `users_update` AFTER UPDATE ON `users`
 FOR EACH ROW BEGIN
    DECLARE profit DOUBLE DEFAULT 0;

    SELECT SUM(PROFIT) FROM trades WHERE LOGIN = new.LOGIN AND PROFIT > 0 INTO @profit;

    UPDATE user_details SET profit = @profit WHERE LOGIN = new.LOGIN;
END;

答案 1 :(得分:0)

这看起来像MySQL的一个问题。我怀疑这可能是由于" lower_case_table_names"设置。显然,我在触发器中声明的变量名称和表中的列名称"交易"完全相同(利润)。因此,MySQL错误地认为聚合函数SUM(利润)需要针对变量而不是列执行。奇怪的是MySQL不是非常严格,变量名必须以@。为前缀。

一旦我将变量名称更改为total_profit,相同的查询就开始工作了!

感谢您的回答。