Aqui está um script de exemplo usando expressão de tabela comum:
with recursive sumthis(id, val) as (
select id, value
from example
where id = :selectedid
union all
select C.id, C.value
from sumthis P
inner join example C on P.id = C.parentid
)
select sum(val) from sumthis
O script acima cria uma tabela 'virtual' chamada
sumthis
que tem colunas id
e val
. É definido como o resultado de duas seleções mescladas com union all
. Primeiro
select
obtém a raiz (where id = :selectedid
). Segundo
select
segue os filhos dos resultados anteriores iterativamente até que não haja nada para retornar. O resultado final pode então ser processado como uma tabela normal. Neste caso, a coluna val é somada.