我有表objs
,其中包含有关文件和目录的信息。
每个记录都有行
id, fileSize, parentID, dirSize.
每个记录(但不是第一条记录)都具有parentID,该ID等于父目录的ID。
我想递归计算每个目录的大小。
一个简单的解决方案,无需递归并且基于文件和目录路径是
update objs set dirSize= (
select sum(b.fileSize) from objs b where b.fullPath like objs.fullPath||'\%' and b.isDir=0)
where isDir=1
我想将其重写为递归方法,但我坚持
WITH RECURSIVE
works_for_alice(n, m) AS (
select id, fileSize from objs where id=9
UNION
SELECT a.id, a.fileSize FROM objs a, works_for_alice b
WHERE a.parentID=b.n
)
SELECT sum(m) FROM works_for_alice
我不明白,如何应用此选择
SELECT sum(m) FROM works_for_alice
objs
表的更新以及如何更改ID中的值select id, fileSize from objs where id=**9**
在
WITH
中传递给update语句中更新行的ID的此选择器值...非常感谢你!
最佳答案
通过此查询解决了此问题,该问题受帖子sqlite CTE with UPDATE和sqlite with
文档https://www.sqlite.org/lang_with.html的启发:
update objs set dirSize = 0;
update objs set dirSize = (
WITH RECURSIVE
works_for_alice(n, m) AS(
select objs.id, 0
UNION all
SELECT a.id, a.fileSize FROM objs a, works_for_alice b
WHERE a.parentID = b.n
)
SELECT sum(m) FROM works_for_alice
)
关于sql - SQLite中的递归更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42309538/