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

Jak ukládat a dotazovat databázi se stromovou strukturou

V jakékoli databázi, pokud má každý člen "stromu" stejné vlastnosti, je nejlepší použít samoodkazovací tabulku, zvláště pokud má každý strom 1 a pouze 1 přímého rodiče.

IE.

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

Obvykle by velký šéf měl NULL boss_hr_id

K dotazu na takovou strukturu můžete v postgresu použít CTE ("s rekurzivním" příkazem)

Pro tabulku výše bude fungovat dotaz jako tento:

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. jak zkontrolovat a nastavit proměnnou max_allowed_packet mysql

  2. php artisan migrate throwing [Výjimka PDO] Nelze najít ovladač - Používám Laravel

  3. Vyhledávání chybového čísla zprávy

  4. Načítání XMLType oracle uloženého jako binární XML ze sady výsledků v Javě