PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ist eine rekursive SQL-Abfrage möglich?

Hier ist ein Beispielskript, das einen allgemeinen Tabellenausdruck verwendet:

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

Das obige Skript erstellt eine „virtuelle“ Tabelle namens sumthis die Spalten id hat und val . Es ist definiert als das Ergebnis zweier Auswahlen, die mit union all zusammengeführt wurden .

Zuerst select erhält die Wurzel (where id = :selectedid ).

Zweites select folgt iterativ den Kindern der vorherigen Ergebnisse, bis nichts mehr zurückzugeben ist.

Das Endergebnis kann dann wie eine normale Tabelle verarbeitet werden. In diesem Fall wird die Val-Spalte summiert.