PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie man eine Datenbank mit Baumstruktur speichert und abfragt

Wenn in jeder Datenbank jedes Mitglied des "Baums" die gleichen Eigenschaften hat, ist es am besten, eine selbstreferenzierende Tabelle zu verwenden, insbesondere wenn jeder Baum 1 und nur 1 direkten Elternteil hat.

IE.

HR
------
ID
first_name
last_name
department_id
sal
boss_hr_id (referneces HR.ID)

Normalerweise hätte der Big Boss eine NULL boss_hr_id

Um eine solche Struktur abzufragen, können Sie in Postgres CTEs ("mit rekursiver" Anweisung)

verwenden

Für die obige Tabelle funktioniert eine Abfrage wie diese:

with recursive ret(id, first_name, last_name, dept_id,boss_hr_id) as
    (
      select * from hr
      where hr.id=**ID_OF_PERSON_YOU_ARE_QUERYING_STRUCTURE**
      union
      select hr.id, hr.first_name, hr.last_name,hr.dept_id,hr.boss_hr_id, lev+1 from hr
      inner join ret on ret.boss_hr_id=hr.hr_id
    ) 
    select * from ret
)