MySQL:使用 where 子句更新触发器

时间:2021-06-11 17:05:18

标签: mysql triggers

我有两个表,列表和用户。

我正在尝试创建一个触发器,该触发器使用列表表中的值更新用户表,其中列值匹配,但它不起作用。

我可以使用IF语句,但实际数据中有两种组合,所以我希望使用where子句。示例:其中 user1 = value1 和 user2 = value2 和 user3 = value 3。在真实数据中总是存在匹配。

这是一张图片,用于解释 user_output 列中具有所需结果的两个表。 Dog 是正确的,因为 user1 匹配 value1,user2 匹配 value2,user3 匹配 value3。

enter image description here

这是我一直在尝试的触发器:

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

1 个答案:

答案 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

相关问题