sql >> Database >  >> RDS >> PostgreSQL

Postgresql-query voor het verkrijgen van een ouder-kindrelatie op n-niveau opgeslagen in een enkele tabel

Met Postgres kunt u een recursieve algemene tabeluitdrukking gebruiken:

with recursive rel_tree as (
   select rel_id, rel_name, rel_parent, 1 as level, array[rel_id] as path_info
   from relations 
   where rel_parent is null
   union all
   select c.rel_id, rpad(' ', p.level * 2) || c.rel_name, c.rel_parent, p.level + 1, p.path_info||c.rel_id
   from relations c
     join rel_tree p on c.rel_parent = p.rel_id
)
select rel_id, rel_name
from rel_tree
order by path_info;

SQLFiddle op basis van uw voorbeeld:http://sqlfiddle.com/#!11/59319/19

(Ik heb de spaties voor inspringen vervangen door onderstrepingstekens omdat SQLFiddle de spaties niet correct weergeeft)




  1. Fout met mysql-procedures ERROR 1304 &ERROR 1305

  2. Een gegevensmodel ontwerpen voor een boekingssysteem voor hotelkamers

  3. Door komma's gescheiden waarden in kolommen splitsen naar meerdere rijen in Sql Server

  4. IS vs AS trefwoorden voor PL/SQL Oracle Function of Procedure Creation