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

时间:2015-01-08 15:04:51

标签: mysql triggers

我想要的是根据另一个表中的值设置一个新值。这是BEFORE UPDATE触发器。我需要在“webs”表中设置new.amount,具体取决于表“webTransactions”中百分比列的值。如果百分比= 30.00,则新金额必须从0.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);

任何人都可以帮助让这个触发器运行吗?

谢谢

2 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情

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)

使用websTransactions的主键

替换key

答案 1 :(得分:0)

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

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 ;