带join的MySQL触发器

带join的MySQL触发器,mysql,triggers,geolocation,Mysql,Triggers,Geolocation,我有两个表,一个用于捕获登录信息的登录表,以及一个用于将IP信息与国家关联的范围表。我试图创建一个触发器,通过执行范围表的联接,在插入后更新logins.country列 表的结构如下所示: CREATE TABLE logins ( id int(10) unsigned NOT NULL AUTO_INCREMENT, users_id int(10) unsigned NOT NULL, ip int(10) unsigned NOT NULL, country varchar(2) DE

我有两个表,一个用于捕获登录信息的登录表,以及一个用于将IP信息与国家关联的范围表。我试图创建一个触发器,通过执行范围表的联接,在插入后更新logins.country列

表的结构如下所示:

CREATE TABLE logins (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
users_id int(10) unsigned NOT NULL,
ip int(10) unsigned NOT NULL,
country varchar(2) DEFAULT NULL,
status tinyint(4) NOT NULL,
timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE ranges (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
first int(10) unsigned NOT NULL,
last int(10) unsigned NOT NULL,
country varchar(2) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY first_UNIQUE (first),
UNIQUE KEY last_UNIQUE (last)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我有这个触发器,但似乎不起作用:

CREATE TRIGGER update_country
AFTER INSERT ON logins
FOR EACH ROW
UPDATE logins l
JOIN ranges r ON l.ip >= first AND l.ip <= last
SET l.country = r.country
WHERE l.id = NEW.id;

知道我哪里出错了吗?

在玩了一段时间后,我意识到加入并不是必需的,我正在使它变得比需要的复杂得多。这是最后一个触发点:

CREATE TRIGGER update_country BEFORE INSERT
ON logins FOR EACH ROW
SET NEW.country = (SELECT country FROM ranges WHERE NEW.ip >= first AND NEW.ip <= last);