Aquí hay un script de ejemplo que usa una expresión de tabla común:
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
El script anterior crea una tabla 'virtual' llamada sumthis
que tiene columnas id
y val
. Se define como el resultado de dos selecciones combinadas con union all
.
Primero select
obtiene la raíz (where id = :selectedid
).
Segundo select
sigue a los hijos de los resultados anteriores de forma iterativa hasta que no hay nada que devolver.
El resultado final se puede procesar como una tabla normal. En este caso, se suma la columna val.