我有两个表,列表和用户。
我正在尝试创建一个触发器,该触发器使用列表表中的值更新用户表,其中列值匹配,但它不起作用。
我可以使用IF语句,但实际数据中有两种组合,所以我希望使用where子句。示例:其中 user1 = value1 和 user2 = value2 和 user3 = value 3。在真实数据中总是存在匹配。
这是一张图片,用于解释 user_output 列中具有所需结果的两个表。 Dog 是正确的,因为 user1 匹配 value1,user2 匹配 value2,user3 匹配 value3。
这是我一直在尝试的触发器:
CREATE TRIGGER trigger_1
BEFORE UPDATE
ON users
FOR EACH ROW
BEGIN
IF (NEW.user1 <> OLD.user1 or new.user2 <> old.user2 or new.user <> old.user3 ) THEN
SET NEW.user_output = ( SELECT value4
FROM lists
where users.user1 = lists.value1 and users.user2 = lists.value2 and users.user3 = lists.value3
LIMIT 1 );
end if;
END;
数据库小提琴:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=d63fe3af02bd55fd2fe51cba1ba3c05d
答案 0 :(得分:1)
CREATE TRIGGER trigger_1
BEFORE UPDATE
ON users
FOR EACH ROW
BEGIN
IF (NEW.user1 <> OLD.user1 or new.user2 <> old.user2 or new.user3 <> old.user3 ) THEN
SET NEW.user_output = ( SELECT value4
FROM lists
where NEW.user1 = lists.value1
and NEW.user2 = lists.value2
and NEW.user3 = lists.value3
LIMIT 1 );
end if;
END;
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=75629e35021ef5a62873cff46df1fa7b