我想要的是根据另一个表中的值设置一个新值。这是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);
任何人都可以帮助让这个触发器运行吗?
谢谢
答案 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 ;