sql - SQLite中的递归更新

标签 sql sqlite recursion

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

相关文章:

recursion - F#中的递归记录

sql - 带有 GROUP BY 和零条目的 MySQL COUNT

mysql - SQL 强制左连接打印不匹配项

mysql - SQL 产品组大小和颜色一起

sql - 使用什么数据结构来存储缓存 SQL 查询?

sql - 新手SQL表设计

iOS实现原理

android - Android中的全文搜索示例

javascript - Tic-Tac-Toe 中的 Minimax 没有返回正确的值

java - 计算2的幂,java