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

Thử thách truy vấn đệ quy - ví dụ đơn giản về cha / con

Với sự trợ giúp từ RhodiumToad trên #postgresql, tôi đã đạt được giải pháp này:

WITH RECURSIVE node_graph AS (
    SELECT ancestor_node_id as path_start, descendant_node_id as path_end,
           array[ancestor_node_id, descendant_node_id] as path 
    FROM node_relations

    UNION ALL 

    SELECT ng.path_start, nr.descendant_node_id as path_end,
           ng.path || nr.descendant_node_id as path
    FROM node_graph ng
    JOIN node_relations nr ON ng.path_end = nr.ancestor_node_id
) 
SELECT * from node_graph order by path_start, array_length(path,1);

Kết quả đúng như mong đợ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. Làm cách nào để tạo một trình kích hoạt để cập nhật một cột trong một bảng khác?

  2. Cách tốt nhất để đếm các bản ghi theo khoảng thời gian tùy ý trong Rails + Postgres

  3. Symfony2 Doctrine - Điều khoản ILIKE cho PostgreSQL?

  4. Sử dụng MS Access &ODBC để kết nối với PostgreSQL từ xa

  5. viết bảng trong cơ sở dữ liệu với dplyr