PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

É possível fazer uma consulta SQL recursiva?


Aqui está um script de exemplo usando expressão de tabela comum:
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

O script acima cria uma tabela 'virtual' chamada sumthis que tem colunas id e val . É definido como o resultado de duas seleções mescladas com union all .

Primeiro select obtém a raiz (where id = :selectedid ).

Segundo select segue os filhos dos resultados anteriores iterativamente até que não haja nada para retornar.

O resultado final pode então ser processado como uma tabela normal. Neste caso, a coluna val é somada.