【问题标题】:Sqlite3 trigger with UPSERT带有 UPSERT 的 Sqlite3 触发器
【发布时间】:2018-03-05 21:48:06
【问题描述】:

我在我的 Rails 项目中使用 sqlite3,我需要创建一个触发器,当另一个引用表被更新时,它会自动插入到表中。 例如,我有 2 个表 BreakdownTotal,每个表的架构如下。 细分

Date TEXT NOT NULL,
Amount DECIMAL NOT NULL

总计

Date TEXT NOT NULL,
Daily_Total DECIMAL NOT NULL,
FOREIGN KEY (Date) REFERENCES Breakdown(Date)

然后,下面是我的触发器创建。

        CREATE TRIGGER update_sum AFTER INSERT ON Breakdown
   ...> BEGIN
   ...> INSERT OR REPLACE INTO Total (Date, Daily_Total)
   ...> VALUES (Breakdown.Date,
   ...> (SELECT SUM(Amount) FROM Breakdown WHERE Date = Total.Date));
   ...> END;

所以,我的想法是,当我以 **INSERT INTO Breakdown VALUES (Date('now'),19.99);** 的身份插入 Breakdown 表时,Total 表会通过插入或更新来更新。

但是,当我插入细分表时,我收到一条错误消息 Error: no such column: Breakdown.Date

谁能告诉我我做错了什么?

谢谢!

【问题讨论】:

    标签: sql sqlite triggers


    【解决方案1】:

    可以访问导致触发器触发的行的值,但那个“表”is called NEW

    INSERT ... VALUES(NEW.Date, (SELECT SUM... WHERE Date = NEW.Date));
    

    【讨论】:

    • 非常感谢!这正是我想要的!但是,我能否获得更多解释或文档来说明为什么我们使用 NEW 而不是实际的表名?
    猜你喜欢
    • 2014-06-07
    • 2021-08-14
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    相关资源
    最近更新 更多