选择 Mysql 触发器内变量的值

2024-01-04

好吧,我见过很多类似的问题,但爬过答案并不能让我的触发错误消失!
我需要的结果是:每当在数据库表中插入新值时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服务器版本相对应的手册,了解使用near '= select address from temp_pool where 1 order by date desc, time desc limit 1;的正确语法。 ' 在第 5 行

我坚信从以下位置分配值存在一些问题SELECT到一个变量[OLD_ADDR],那么有什么办法可以解决我的问题吗?
逻辑很简单,从查询中就可以理解需求,对吗?

对所有意见和建议持开放态度。


代替:

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

Use:

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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

选择 Mysql 触发器内变量的值 的相关文章