Mysql 根据另一个表值触发器设置新值

Mysql 根据另一个表值触发器设置新值,mysql,triggers,Mysql,Triggers,我尝试的是根据另一个表中的值设置一个新值。这是更新前触发器。我需要根据表“webTransactions”中百分比列的值,在“webs”表中设置一个新的.amount。如果百分比=30.00,则新金额必须从任意值更改为0.00。到目前为止,我尝试过但给了我错误: if new.type=9 and new.referenceId=0 then set new.amount=0.00 where (SELECT * FROM webs s JOIN webTransactions r ON r.w

我尝试的是根据另一个表中的值设置一个新值。这是更新前触发器。我需要根据表“webTransactions”中百分比列的值,在“webs”表中设置一个新的.amount。如果百分比=30.00,则新金额必须从任意值更改为0.00。到目前为止,我尝试过但给了我错误:

if new.type=9 and new.referenceId=0 then set new.amount=0.00 where (SELECT * FROM webs s JOIN webTransactions r ON r.webId = s.id WHERE s.percent = 30.00);
有人能帮我启动这个触发器吗


谢谢你

你可以试试这样的

UPDATE websTransactions
SET amount= CASE
WHEN type=9 AND referenceId=0 THEN 0.00
ELSE amount
END
WHERE key IN   
(SELECT key FROM webs s JOIN webTransactions r ON r.webId = s.id 
WHERE s.percent = 30.00)

替换为WebTransactions的主键

您可能需要使用一些更有效的代码,触发器是一种存储例程,因此可以这样编程。此外,不必在子查询中加入要更新的表

DELIMITER $$

CREATE TRIGGER amount_check BEFORE UPDATE ON webs
FOR EACH ROW
BEGIN
    IF NEW.type=9 and NEW.referenceId=0 THEN
        SET @percent := (SELECT percent
                     FROM webTransactions
                     WHERE webId = OLD.id);
        IF @percent = 33.00 THEN
            NEW.amount = 0
        END IF;
    END IF;
END$$

DELIMITER ; 

嗨,Faby,谢谢你的回复,这缺少表webTransactions中的百分比值,我如何将百分比值调整为新的.amount from webTransactions表?我已添加了查询的where部分,请告诉我是否符合你的问题。我正在检查,但缺少一些内容,让您了解:百分比属于表webs,金额属于表websTransactions。我不知道为什么,但在“where key in…”中给了我一个错误。key是一个保留的单词