sql >> データベース >  >> RDS >> PostgreSQL

ツリー構造でデータベースを保存およびクエリする方法

    どのデータベースでも、「ツリー」の各メンバーが同じプロパティを持っている場合、特に各ツリーに直接の親が1つしかない場合は、自己参照テーブルを使用するのが最適です。

    IE。

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

    通常、ビッグボスにはNULLのboss_hr_idがあります

    このような構造をクエリするには、postgresでCTE( "with recursive"ステートメント)を使用できます

    上記の表の場合、次のようなクエリが機能します:

    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. ifステートメントが正常に機能しない場合の使用

    2. JavaSpringBootで複数結合SQLクエリを使用する方法

    3. 指定された条件の行が少なくとも1つ存在するかどうかを識別します

    4. mysql 5.7は、中程度のSQLではmysql5.6よりもはるかに低速です。