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

Dapatkan jalur dari database poin di sql

Gunakan cte rekursif dengan array[array[source, destination]] sebagai kolom agregasi:

with recursive cte(source, destination, path) as (
    select source, destination, array[array[source, destination]]
    from points
union all
    select p.source, p.destination, path || array[p.source, p.destination]
    from cte c
    join points p on c.destination = p.source
    where not array[array[p.source, p.destination]] <@ path
)
select distinct on (path[1:1]) path
from (
    select distinct on (source, destination) *
    from cte
    order by source, destination, array_length(path, 1) desc
    ) s    
order by path[1:1], array_length(path, 1) desc;

        path         
---------------------
 {{1,2},{2,3},{3,7}}
 {{5,7}}
 {{9,12}}
(3 rows)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hapus orang tua jika tidak dirujuk oleh anak lain

  2. Postgres LIKE dengan nilai kolom sebagai substring

  3. Opsi Failover Cluster Basis Data Lengkap Multi-Cloud untuk PostgreSQL

  4. SQL dua kriteria dari satu grup-oleh

  5. Haruskah saya menentukan INDEX dan UNIQUE INDEX?