2016-03-11 121 views
0

如果我单独创建这两个MySQL触发器,两者都执行正常。但我没有设法将它们结合起来,以便能够延长持续时间x率。Mysql触发器,选择并更新

DROP TRIGGER IF EXTERNTS deduct_balance; CREATE DEFINER = root @localhost TRIGGER deduct_balance 更新后ON transactions FOR EACH ROW SET @Rate =(SELECT速率FROM语言WHERE languages.idlanguages = contracts.languages_idlanguajes);

DROP TRIGGER IF EXTERNTS deduct_balance; CREATE DEFINER = root @localhost TRIGGER deduct_balance UPDATE ON transactions FOR EACH ROW AFTER UPDATE SET合同= balance平衡 - (UNIX_TIMESTAMP(NEW.end_date) - UNIX_TIMESTAMP(OLD.start_date))/ 60 WHERE contracts.idcontracts =新.contracts_idcontracts

COMBINED(I GET ERROR) DROP TRIGGER IF EXTERNTS deduct_balance; CREATE DEFINER = root @localhost TRIGGER deduct_balance 更新后ON transactions FOR EACH ROW SET @Rate =(SELECT速率FROM语言WHERE languages.idlanguages = contracts.languages_idlanguajes); UPDATE contracts SET balance = balance - (UNIX_TIMESTAMP(NEW.end_date) - UNIX_TIMESTAMP(OLD.start_date))/ 60; WHERE contracts.idcontracts = new.contracts_idcontracts

任何想法?

我得到这个错误 错误 CONSULTA SQL:

UPDATE合同SET balance =平衡 - (UNIX_TIMESTAMP(NEW.end_date) - UNIX_TIMESTAMP(OLD.start_date))/ 60; 的MySQL公顷dicho:Documentación

1054 - 在 '字段列表'

+0

你会得到什么错误? – dgig

+0

你有额外的;在COMBINED查询中的WHERE之前。 'balance - (UNIX_TIMESTAMP(NEW.end_date) - UNIX_TIMESTAMP(OLD.start_date))/ 60; WHERE' – Tin

+0

正确的;不应该在那里,但错误仍然存​​在 – Victor

回答

0

未知列 'NEW.end_date' 它的工作是这样的: UPDATE合同 SET balance =平衡 - (((UNIX_TIMESTAMP(NEW.end_date ) - UNIX_TIMESTAMP(OLD.start_date))/ 60)*(SELECT rates FROM languages WHERE languages.idlanguages = new.languages_idlanguages)) WHERE contracts.idcontracts = new.contracts_idcontracts