sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan gemmer og forespørger du en database med træstruktur

I enhver database, hvis hvert medlem af "træet" har de samme egenskaber, er det bedst at bruge en selvreferencetabel, især hvis hvert træ har 1 og kun 1 direkte forælder.

IE.

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

Normalt ville den store chef have et NULL boss_hr_id

For at forespørge på en sådan struktur kan du i postgres bruge CTE'er ("med rekursiv" erklæring)

For ovenstående tabel vil en forespørgsel som denne fungere:

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. Hvad gør CONSTRAINT med FK'er i MySQL?

  2. PHP konvertere datetime til sekunder

  3. #1241 - Operand skal indeholde 1 kolonne(r)

  4. hvordan man laver en opdeling på en sql tabelkolonne