gpt4 book ai didi

sql - SQLite中的递归更新

转载 作者:行者123 更新时间:2023-12-03 19:30:07 25 4
gpt4 key购买 nike

我有表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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com