MySQL: 使用 where 子句更新触发器
MySQL: Update Trigger with where clause
我有两个 table,列表和用户。
我正在尝试创建一个触发器,用列表 table 中的值更新用户 table,其中列值匹配,但它不起作用。
我可以使用IF语句,但实际数据中有两种组合,所以我希望使用where子句。示例:其中 user1 = value1 和 user2 = value2 和 user3 = value 3。在真实数据中总是匹配。
这是一张图片,用于解释 user_output 列中的两个 table 以及所需的结果。 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;
DB Fiddle: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=d63fe3af02bd55fd2fe51cba1ba3c05d
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
我有两个 table,列表和用户。
我正在尝试创建一个触发器,用列表 table 中的值更新用户 table,其中列值匹配,但它不起作用。
我可以使用IF语句,但实际数据中有两种组合,所以我希望使用where子句。示例:其中 user1 = value1 和 user2 = value2 和 user3 = value 3。在真实数据中总是匹配。
这是一张图片,用于解释 user_output 列中的两个 table 以及所需的结果。 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;
DB Fiddle: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=d63fe3af02bd55fd2fe51cba1ba3c05d
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