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

CTE đệ quy nối các trường với cha mẹ từ điểm tùy ý

Trong từ trên xuống phương thức truy vấn ban đầu chỉ nên chọn các gốc (các mục không có cha mẹ), do đó, truy vấn chỉ trả về mỗi hàng một lần:

with recursive top_down as (
    select id, parent, text
    from test
    where parent is null
union all
    select t.id, t.parent, concat_ws('/', r.text, t.text)
    from test t
    join top_down r on t.parent = r.id
)
select id, text
from top_down
where id = 4    -- input

Nếu mục tiêu của bạn là tìm một mặt hàng cụ thể, hãy từ dưới lên cách tiếp cận hiệu quả hơn:

with recursive bottom_up as (
    select id, parent, text
    from test
    where id = 4    -- input
union all
    select r.id, t.parent, concat_ws('/', t.text, r.text)
    from test t
    join bottom_up r on r.parent = t.id
)
select id, text
from bottom_up
where parent is null

Loại bỏ điều kiện cuối cùng ở đâu trong cả hai truy vấn để thấy sự khác biệt.

Kiểm tra nó trong trình sắp xếp lại.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm kích thước byte của một hàng trong PostgreSQL

  2. Cách sử dụng cấu trúc dữ liệu vòng trong các hàm cửa sổ

  3. Làm cách nào để nhập mô-đun hoặc cài đặt tiện ích mở rộng trong Postgres?

  4. PostgreSQL chạy chậm? Mẹo &Thủ thuật để Truy cập Nguồn

  5. LISTAGG (cơ sở dữ liệu Oracle) trong PostgreSQL là gì?