【发布时间】:2020-11-18 16:44:57
【问题描述】:
在 SQLite 中,我有一个名为 layer 的树形结构表,其中包含 (id, ..., parentId) 列。还有一个名为dir 的普通表,列(id, ..., modifiedTime)。情况是:
一旦dir 中的某些行使用新的 modifiedTime 更新,它们的所有父项也应更新。保证 modifiedTime 不递减。
没有触发器,我可以使用这个 sql 来完成它(通过使用 WITH RECURSIVE 子句):
WITH RECURSIVE P(id) AS (
SELECT parentId FROM layer WHERE id="The Id of Modified Row"
UNION ALL
SELECT L.parentId FROM layer AS L, P WHERE L.id=P.id)
UPDATE dir SET modifiedT=CURRENT_TIMESTAMP WHERE id IN P;
但是当我将 sql 放入触发器时,UPDATE 语句出错。看完SQLite offical doc,我明白了The WITH clause cannot be used within a CREATE TRIGGER.
这就是问题
我怎样才能让触发器做我想做的事?
换句话说,如何替换触发器中的“WITH”子句?
【问题讨论】:
标签: sql sqlite triggers tree-structure