PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

È possibile eseguire una query SQL ricorsiva?

Ecco uno script di esempio che utilizza un'espressione di tabella comune:

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

Lo script sopra crea una tabella "virtuale" chiamata sumthis che ha colonne id e val . È definito come il risultato di due selezioni unite con union all .

Prima select ottiene la radice (where id = :selectedid ).

Secondo select segue i figli dei risultati precedenti in modo iterativo finché non c'è nulla da restituire.

Il risultato finale può quindi essere elaborato come una normale tabella. In questo caso viene sommata la colonna val.