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