PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zapytanie Postgresql do uzyskania n-poziomowej relacji rodzic-dziecko przechowywanej w jednej tabeli

W Postgresie możesz użyć rekurencyjnego wyrażenia tabelowego:

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 na podstawie Twojego przykładu:http://sqlfiddle.com/#!11/59319/19

(Zamieniłem spacje na wcięcia na podkreślenia, ponieważ SQLFiddle nie wyświetla spacji poprawnie)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. rake db:utwórz błąd kodowania za pomocą postgresql

  2. Połącz trygram z wyszukiwaniem według rankingu w django 1.10

  3. Rekord aktywny:Zapytanie JSON

  4. Uruchamianie migracji Django na zadokowanym projekcie

  5. Czy przypadek ma znaczenie, gdy „auto” ładuje dane z S3 do tabeli Redshift?