PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Tantangan kueri rekursif - contoh orang tua/anak sederhana

Dengan bantuan dari RhodiumToad di #postgresql, saya menemukan solusi ini:

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

Hasilnya persis seperti yang diharapkan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa kata sandi default untuk Postgres

  2. Kueri spasial pada tabel besar dengan beberapa self join berkinerja lambat

  3. Membuat string dari beberapa record dengan 2 kolom

  4. IServiceCollection tidak mengandung definisi atau ekstensi untuk AddNpgsql

  5. Heroku - buang dan muat satu tabel ke database postgres bersama