У меня есть таблица objs
, которая содержит информацию о файлах и каталогах. Каждая запись имеет строкиРекурсивное обновление в SQLite
id, fileSize, parentID, dirSize.
Каждый (но не первая запись) из записи имеет ParentID, что равно идентификатор родительского каталога.
Я хочу считать рекурсивные размеры каждой директории.
Простое решение, без рекурсивный и на основе файлов и директорий трактов
update objs set dirSize= (
select sum(b.fileSize) from objs b where b.fullPath like objs.fullPath||'\%' and b.isDir=0)
where isDir=1
Я хочу переписать его рекурсивный метод, но я stucked на
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
таблицы и как изменить значение идентификатора в
select id, fileSize from objs where id=**9**
в WITH
, чтобы перейти в эту величину селекторном идентификатор обновления строки в заявлении обновления ...
Большое спасибо!
'works_for_alice' * не * SQL-ключевое слово, которое вы должны принять без изменений, и' n'/' m' тоже не хорошие имена. –
Я знаю, это всего лишь экспериментальный фрагмент кода, который был скопирован и переписан в 3 часа глубокой ночи:) ... –