PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Truy vấn đệ quy cho dữ liệu phân cấp dựa trên danh sách kề

Truy vấn của bạn cho cấp độ đầu tiên (tại đây depth để phân biệt với bảng) phải giống như sau:

select l.name, h.child_id, 1 as depth 
from level l
join level_hierarchy h on l.id = h.child_id 
where h.parent_id is null;

   name   | child_id | depth 
----------+----------+-------
 Level1_a |        1 |     1
(1 row)

Lưu ý việc sử dụng đúng is null (không sử dụng = để so sánh với null vì nó luôn cho null ).

Bạn có thể sử dụng ở trên làm truy vấn ban đầu trong cte đệ quy:

with recursive recursive_query as (
    select l.name, h.child_id, 1 as depth 
    from level l
    join level_hierarchy h on l.id = h.child_id 
    where h.parent_id is null
union all
    select l.name, h.child_id, depth + 1
    from level l
    join level_hierarchy h on l.id = h.child_id
    join recursive_query r on h.parent_id = r.child_id
)
select *
from recursive_query
-- where depth = 2

   name   | child_id | depth 
----------+----------+-------
 Level1_a |        1 |     1
 Level2_b |        3 |     2
 Level2_a |       19 |     2
 Level3_a |        4 |     3
 Level3_b |        5 |     3
 Level4_a |        6 |     4
 Level4_b |        7 |     4
(7 rows)    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt Postgres.app trên máy Mac

  2. Cách trả về các bản ghi theo đúng thứ tự trong PostgreSQL

  3. Cách bảo mật cơ sở dữ liệu PostgreSQL của bạn - 10 mẹo

  4. 2 cách để có được kích thước của cơ sở dữ liệu trong PostgreSQL

  5. python json kết xuất đưa đối tượng vào đối tượng trên row_to_json return