好吧,我也看到过很多类似的问题,但在答案上爬来爬去并不能使我的触发器没有错误!
我需要的结果是:每当在数据库表中插入一个新值时,它就会触发,如果新地址不等于前一个地址值,并且其temp_pool与此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编辑器并将分隔符设置为NEW.dev_id
我得到的错误是:
1064-您的SQL语法有错误;请检查对应于您的MySQL服务器版本的手册,在第5行的“=select address from temp_pool where 1 order by date desc,time desc limit 1;”附近使用正确的语法
我坚信将$$中的值赋给变量[SELECT]会有问题,那么有什么方法可以解决我的问题吗?
逻辑很简单,从查询中可以理解需求,对吧?
接受所有的意见和建议。

最佳答案

而不是:

 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);

或者使用非标准的赋值语句(不确定mysql是否支持它):
SELECT OLD_AADR = address from temp_pool where dev_id like NEW.dev_id
                  order by address
                  limit 1;

在这两种情况下,SELECT语句都不必只返回标量值。这就是为什么我使用SELECT

09-25 17:16
查看更多