PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Rekurencyjne wyzwanie zapytania - prosty przykład nadrzędny/podrzędny

Z pomocą RhodiumToad na #postgresql doszedłem do tego rozwiązania:

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);

Wynik jest dokładnie taki, jak oczekiwano.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oblicz najbliższy dzień roboczy w Postgres

  2. Jak umieścić psql na ścieżce podczas korzystania z Postgres.app na OS X?

  3. Przegląd replikacji logicznej w PostgreSQL

  4. Nie można usunąć roli przyznanej do połączenia z bazą danych

  5. Aktualizacja wierszy bazy danych bez blokowania tabeli w PostgreSQL 9.2