PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Est-il possible de faire une requête SQL récursive ?

Voici un exemple de script utilisant une expression de table commune :

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

Le script ci-dessus crée une table "virtuelle" appelée sumthis qui a des colonnes id et val . Il est défini comme le résultat de deux sélections fusionnées avec union all .

Première select obtient la racine (where id = :selectedid ).

Deuxième select suit les enfants des résultats précédents de manière itérative jusqu'à ce qu'il n'y ait plus rien à renvoyer.

Le résultat final peut alors être traité comme un tableau normal. Dans ce cas, la colonne val est additionnée.