sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:lus totdat een voorwaarde waar is

Uw denken is verkeerd voor SQL. Denk niet in lussen en voorwaarden en variabelen; denk in plaats daarvan na over hoe u de gewenste gegevens kunt beschrijven. Het lastige is dat je wilt dat de query verwijst naar zijn eigen resultaten en dat is wat recursieve CTE's zijn voor:

Je zoekt zoiets als dit:

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

Dat geeft je dit:

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

en dan kun je dat weer samenvoegen in een pad dat meer gekoppeld zou zijn (of wat dan ook geschikt is in de taal van je klant) buiten de database. U hoeft parent niet op te nemen natuurlijk, maar als je het toevoegt, kun je de "aanwijzers" verbeteren.




  1. Wat is er nieuw in MariaDB Server 10.5?

  2. Ontdek welke tabellen werden beïnvloed door Triggers

  3. Gegevens opslaan in het Arabisch in de MySQL-database

  4. fout met oci_fetch_array, kan gegevens ophalen van oracle door php