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;
然而,当单独执行相同的查询时,我得到数据。这真让我抓狂。请有人建议我哪里出错了?
答案 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,相同的查询就开始工作了!
感谢您的回答。