我有两张桌子:
我已经在oee_main上有一个后插入触发器,如下所示:
CREATE TRIGGER `oee_upd` AFTER INSERT ON `oee_main`
FOR EACH ROW UPDATE oee_client
SET END_DATE= NOW() where END_DATE IS NULL
我现在需要更多地开发触发器,以便oee_main中新插入的行不仅会将oee_client的END_DATE更新为NOW(),其中END_DATE为NULL,而且只更新列的oee_client行名为Machine_ID的名称等于oee_main中名为NAME的新插入列。
我已经尝试将其添加到上述触发器的where条件中但没有成功:
where END_DATE IS NULL and Machine_ID = new.`oee_main`.`NAME`
因此,我所追求的是当在oee_main中插入新记录时,在'NAME'列中具有例如'2'的值时,触发器仅更新oee_client的END_DATE列,其中NULL和oee_client的Machine_ID是等于oee_main中新插入的NAME值。
由于
答案 0 :(得分:0)
我认为这是你想要的逻辑:
DELIMITER $$
CREATE TRIGGER `oee_upd` AFTER INSERT ON `oee_main`
FOR EACH ROW
BEGIN
UPDATE oee_client c
SET c.END_DATE = NOW()
WHERE c.END_DATE IS NULL AND c.Machine_ID = new.NAME;
END$$
DELIMITER ;
每当定义触发器,存储过程和函数时,请记住使用delimiter
语句。它有助于防止将来出现错误。
至于您的错误,在使用NEW
时,您不需要提及表名。
作为一个局外人,我觉得令人困惑的是,一个表中的NAME
与另一个表中的MACHINE_ID
匹配。我希望这两个表都有一个名为MACHINE_ID
的列。