Postgresql:无向图的递归查询

时间:2017-10-06 10:41:17

标签: sql database postgresql psql

我希望通过Postgresql中的SQL遍历无向图。

我有一张表,其中包含起点和终点(作为ids)的所有边。

edge_id | start_node | end_node
      1            4          5
      2            5          7
      3            1          5

这是我到目前为止所尝试的。这种情况在某些情况下有效,但是旅行指向图表,在某些情况下会导致错误。

WITH RECURSIVE path AS 
(
    SELECT 
        edge_id, start_node, end_node
    FROM 
        simulation.edge_data
    WHERE 
        start_node = ANY ('{ 1,8}'::int[]) 
        OR end_node = ANY ('{ 1,8}'::int[])

    UNION

    SELECT 
        e.edge_id, e.start_node, e.end_node
    FROM 
        simulation.edge_data e, path s
    WHERE 
        s.start_node = e.start_node 
        OR s.start_node = e.end_node 
        OR s.end_node = e.end_node 
        OR s.end_node = e.start_node
)
SELECT * FROM path;

输出应该是连接到起点的所有边

0 个答案:

没有答案