sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Es posible hacer una consulta SQL recursiva?

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.