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

PostgreSQL:Bucle hasta que una condición sea verdadera

Su pensamiento es incorrecto para SQL. No piense en términos de bucles, condiciones y variables; en su lugar, piense en cómo describir los datos que desea. La parte complicada es que desea que la consulta se refiera a sus propios resultados y eso es lo que CTEs recursivos son para:

Estás buscando algo como esto:

with recursive path as (
    select id, parent from T where id = 4
    union all
    select t.id, t.parent from T t join path p on t.id = p.parent
)
select id, parent
from path

Eso te dará esto:

 id | parent 
----+--------
  4 |      2
  2 |      1
  1 |       

y luego puede volver a armarlo en una ruta que sería más enlazada (o lo que sea apropiado en el idioma de su cliente) fuera de la base de datos. No tienes que incluir parent por supuesto, pero incluirlo te ayudará a corregir los "indicadores".