PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgresql заявка за получаване на n-ниво връзка родител-дете, съхранена в една таблица

С Postgres можете да използвате рекурсивен израз на обща таблица:

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 въз основа на вашия пример:http://sqlfiddle.com/#!11/59319/19

(Замених интервалите за отстъп с долна черта, тъй като SQLFiddle не показва интервалите правилно)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да инсталирате множество PostgreSQL сървъри на RedHat Linux

  2. Заявка за булево поле със sqlalchemy

  3. Mikro-orm грешка:неуспешно удостоверяване на парола за потребител postgre

  4. n-ти процентил изчисления в postgresql

  5. Защо планиращият извежда различни резултати за функции с различна променливост?