【问题标题】:trigger: moving date from 1 table to another触发器:将日期从一张表移动到另一张表
【发布时间】:2012-12-03 13:48:30
【问题描述】:

这是我的代码:

create trigger term_ost after update on `payments`
for each row
begin
UPDATE `current` s 
INNER JOIN payments w ON w.id_thing = s.id_thing
INNER JOIN payments w ON w.id= s.id
SET s.`new_pay_date` = w.date;
end;
$$

它不工作。

我希望它在有人购买的东西有新的付款后设置新日期,并将字段日期中的最后一个日期更改为 new_pay_date 中的新日期。

@编辑

我正在尝试更改我的触发器,以便在将字段日期插入付款后从当前更新字段“new_pay_date”。

当前表:

curr_cash
new_pay_date
id_person
id_thing
sum_of_things

总结: 当我将新数据添加到付款时(例如某人支付了费用),我想在当前表中更新他的最后付款时间。在“sum_of_things”中,它汇总了客户支付的所有款项。

@编辑 在这段代码之后:

    CREATE TRIGGER term_ost AFTER INSERT ON `payments`
FOR EACH ROW
BEGIN
    UPDATE `current`
        SET s.`new_pay_date` = NEW.date
    WHERE 
        s.id_thing = NEW.id
END;

有错误:

INSERT INTO `mydb`.`payments` (
`id` ,
`date` ,
`id_thing` ,
`thing_cost`
)
VALUES (
'12312312322', '2012-12-11 15:00:00', '1', '500'
)

MySQL comment:
#1054 - Unknown column 's.new_pay_date' in 'field list'

... :-(

【问题讨论】:

  • 可能是因为“payments w”的双重连接定义。试试INNER JOIN payments w ON w.id_thing = s.id_thing AND w.id = s.id_thing

标签: mysql sql triggers


【解决方案1】:

您多次使用同一个表别名w,这是不允许的。似乎您想加入多个列:

CREATE TRIGGER term_ost AFTER INSERT ON `payments`
FOR EACH ROW
BEGIN
    UPDATE `current`
        SET `new_pay_date` = NEW.date
    WHERE 
        id_thing = NEW.id
END;

【讨论】:

  • 是的,好的。但是我对其进行了一些更改,并且我需要在付款后更新当前表。不更新。当我将“update onpayments”更改为付款时。我收到错误提示付款中没有列名 new_pay_date。因为没有,所以我想更改它是当前的。
  • 能否更新问题中的触发器定义,并简要介绍一下current表的结构?
  • 请查看更新后的回复。您需要参考包含插入记录的NEW 表。此外,您不需要 JOIN,只需使用 NEW 表中的日期和 id 来识别 current 中应该更新的记录。
  • 它没有用。顺便说一句,id_thing 是一个物品的 id,而 id 本身就是一个人的 id。所以我无法比较它们。将其更改为 NEW.id_thing,但仍然没有希望。
  • 糟糕,没有s 别名,我的错!我更正了触发器定义。
猜你喜欢
  • 2017-08-23
  • 2019-04-21
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
相关资源
最近更新 更多