sql >> Database >  >> RDS >> PostgreSQL

Een database met boomstructuur opslaan en opvragen?

In elke database, als elk lid van de "boom" dezelfde eigenschappen heeft, is het het beste om een ​​zelfverwijzende tabel te gebruiken, vooral als elke boom 1 en slechts 1 directe ouder heeft.

IE.

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

Gewoonlijk heeft de grote baas een NULL boss_hr_id

Om een ​​dergelijke structuur op te vragen, kunt u in postgres CTE's gebruiken ("met recursieve" instructie)

Voor de bovenstaande tabel werkt een zoekopdracht als deze:

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
) 



  1. Postgres - Functie om het snijpunt van 2 ARRAY's te retourneren?

  2. Islands T-SQL-uitdaging

  3. SQL INSERT INTO meerdere tabellen

  4. LAAD GEGEVENS LOKAAL INFILE MySQL/PHP-probleem