gpt4 book ai didi

mysql - 为 Mysql 触发器中的变量选择值

转载 作者:搜寻专家 更新时间:2023-10-30 19:59:38 24 4
gpt4 key购买 nike

好吧,我见过很多类似的问题,但爬过答案并不能使我的触发器错误消失!
我需要的结果是:每当在数据库表 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 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= select address from temp_pool where 1 order by date desc, time desc limit 1; ' at line 5

我坚信将 SELECT 中的值赋给变量 [OLD_ADDR] 存在一些问题,那么有什么办法可以解决我的问题吗?
逻辑很简单,从查询中可以理解需求,对吧?

欢迎所有意见和建议。

最佳答案

代替:

 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 的原因。

关于mysql - 为 Mysql 触发器中的变量选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12797424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com