PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Предизвикателство за рекурсивна заявка - прост пример за родител/дете

С помощта на RhodiumToad на #postgresql стигнах до това решение:

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

Резултатът е точно както се очакваше.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да запиша ежедневно класиране за модел в Django?

  2. PostgreSQL:Шест не толкова лесни части

  3. Възможно ли е да се предаде рекурсор като параметър директно на FETCH на Npgsql?

  4. docker-compose rails rake db:reset е неуспешно, не може да премахне текущо отворената база данни

  5. Rails schema.rb не включва нова персонализирана функция на Postgres