sql >> Databáze >  >> RDS >> PostgreSQL

Postgresql dotaz pro získání n-úrovňového vztahu rodič-dítě uložené v jedné tabulce

S Postgres můžete použít rekurzivní společný tabulkový výraz:

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 základě vašeho příkladu:http://sqlfiddle.com/#!11/59319/19

(Mezery pro odsazení jsem nahradil podtržítky, protože SQLFiddle nezobrazuje mezery správně)




  1. Vložte byte do typu postgresql json

  2. Zrychlené obnovení databáze v SQL Server 2019

  3. Jak převést sloupec časového razítka SQL Serveru do formátu datetime

  4. Databáze + ověřování systému Windows + uživatelské jméno/heslo?