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

Truy vấn postgresql để nhận mối quan hệ cha-con cấp n được lưu trữ trong một bảng duy nhất

Với Postgres, bạn có thể sử dụng một biểu thức bảng chung đệ quy:

with recursive rel_tree as (
   select rel_id, rel_name, rel_parent, 1 as level, array[rel_id] as path_info
   from relations 
   where rel_parent is null
   union all
   select c.rel_id, rpad(' ', p.level * 2) || c.rel_name, c.rel_parent, p.level + 1, p.path_info||c.rel_id
   from relations c
     join rel_tree p on c.rel_parent = p.rel_id
)
select rel_id, rel_name
from rel_tree
order by path_info;

SQLFiddle dựa trên ví dụ của bạn: http://sqlfiddle.com/#!11/59319/19

(Tôi đã thay thế các khoảng trắng cho phần thụt lề bằng dấu gạch dưới vì SQLFiddle không hiển thị các khoảng trắng một cách chính xác)




  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ùy chọn cấu hình không được hỗ trợ cho services.db:'images'

  2. Kích thước giao dịch tối đa trong PostgreSQL

  3. Làm thế nào để tính toán mọi thứ từ nhiều bảng bằng cách sử dụng một vài truy vấn?

  4. Truy vấn lười biếng clojure.java.jdbc

  5. PostgreSQL chuyển đổi sai từ dấu thời gian không có múi giờ sang dấu thời gian có múi giờ