选择值到MySQL触发器中的变量(Selecting values to a variable in

2019-08-01 06:45发布

好吧,我已经看到了很多类似的问题,但在爬答案不能让我自由触发错误!
结果,我需要的是:每当一个新值插入到数据库表temp_pool ,它触发,如果新的地址不等于与同以前的地址值dev_id为这个NEW.dev_id插入到位置表的新值。

下面是该查询(样品):

CREATE TRIGGER filter 
after insert on geo.temp_pool
for each row
BEGIN
DECLARE OLD_ADDR VARCHAR(2048);
OLD_AADR = select address from temp_pool where dev_id like NEW.dev_id
order by date desc, time desc limit 1;
IF (OLD_ADDR != NEW.address) THEN
INSERT INTO a3380361_geo.location
VALUES (NEW.dev_id,NEW.address,NEW.lat,NEW.lng,NEW.date,NEW.time);
END IF;
END
$$

我使用phpMyAdmin的编辑器,并设置分隔符$$

我正的错误是:

1064 - 您的SQL语法错误; 检查对应于你的MySQL服务器版本使用来自temp_pool附近“=选择地址正确的语法手册,其中1个ORDER BY日期递减,时间倒序限制1; '在列5

我坚信,有一些问题,从分配值SELECT到变量[ OLD_ADDR ],那么有没有什么办法可以解决我的问题?
逻辑很简单,要求是可以理解的从查询,对不对?

打开所有的意见和建议。

Answer 1:

代替:

 OLD_AADR = select address from temp_pool where dev_id like NEW.dev_id

使用:

SET OLD_AADR = (select address 
                from temp_pool 
                where dev_id like NEW.dev_id 
                order by address 
                limit 1);

或使用非标准SELECT赋值语句(不知道的MySQL是否支持与否):

SELECT OLD_AADR = address from temp_pool where dev_id like NEW.dev_id
                  order by address 
                  limit 1;

这并不是说在两种情况下, SELECT语句只返回一个标量值。 这就是为什么我用LIMIT 1



Answer 2:

你有没有注意到错字?

OLD_ADDR OLD_AADR



文章来源: Selecting values to a variable inside Mysql triggers