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

PostgreSQL:Loop indtil en betingelse er sand

Din tankegang er forkert for SQL. Tænk ikke i form af loops og betingelser og variabler; tænk i stedet over, hvordan du beskriver de data, du ønsker. Den vanskelige del er, at du ønsker, at forespørgslen skal referere til sine egne resultater, og det er hvad rekursive CTE'er er til:

Du leder efter noget som dette:

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

Det vil give dig dette:

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

og så kan du sætte det sammen igen i en sti, der ville være mere linket-listet (eller hvad der nu er passende på dit klientsprog) uden for databasen. Du behøver ikke at inkludere parent selvfølgelig, men at inkludere det vil hjælpe dig med at rette op på "pegerne".




  1. aws rds proxy kaster timeout fejl fra nodejs12.x

  2. @Tailable(spring-data-reactive-mongodb) svarende til spring-data-r2dbc

  3. Udtræk Måned fra Dato-feltet

  4. JSON-funktioner og -operatører i SQLite (fuld liste)