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

Nhận đường dẫn từ cơ sở dữ liệu các điểm trong sql

Sử dụng cte đệ quy với array[array[source, destination]] dưới dạng cột tổng hợp:

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. Trả về bản ghi setof (bảng ảo) từ hàm

  2. Trả lại id nếu một hàng tồn tại, INSERT nếu không

  3. Cao nhất mỗi nhóm

  4. Rails không chuyển đổi múi giờ (PostgreSQL)

  5. SQLAlchemy:lọc các giá trị được lưu trữ trong danh sách lồng nhau của trường JSONB