sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man lagrar och frågar efter en databas med trädstruktur

I vilken databas som helst, om varje medlem av "trädet" har samma egenskaper, är det bäst att använda en självreferenstabell, speciellt om varje träd har 1 och endast 1 direkt förälder.

IE.

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

Vanligtvis skulle den stora chefen ha ett NULL boss_hr_id

För att fråga en sådan struktur, i postgres, kan du använda CTEs ("med rekursivt" uttalande)

För tabellen ovan kommer en fråga som denna att fungera:

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. Hur synkroniserar man en viss tabell med samma namn och databasnamn mellan två olika oberoende nätverk där replikering inte är möjlig?

  2. MySQL lämnade yttre sammanfogning med where-sats - returnera omatchade rader

  3. Vad orsakar felet i högerparentes som saknas i SQL?

  4. SQL MIN- och MAX-resultat med tillagd DISTINCT-operator i MySQL