postgresql - PostgreSQL 获取所有可能的起点/终点节点序列
问题描述
我有这个带有有向图节点的 PostgreSQL 表:
node_id | node_sequence
-----------------------
1 1
2 2
3 3
我将返回一个表,其中包含节点之间所有可能的原始目标序列(仅在一个方向上):(1,2);(1,2,3); (2,3)。所以输出表应该是:
node_id
----
1
2
1
2
3
2
3
也许 WITH RECURSIVE 是正确的做法,但我不明白怎么做。
解决方案
从最初的答案编辑:
您似乎有两个您在问题中没有提到的约束:
- 您需要至少 2 个元素的序列
- 序列中的元素必须是升序且连续的
这是一个简单的查询(CTE GraphNode 应该替换为您的表):
WITH RECURSIVE GraphPath AS (
SELECT G2.Node, ARRAY[G1.Node, G2.Node] AS GraphPath /* Start with 2 elements */
FROM GraphNode G1
JOIN GraphNode G2 ON G1.Node + 1 = G2.Node
UNION ALL
SELECT N.Node, P.GraphPath || N.Node
FROM GraphNode N
JOIN GraphPath P ON N.Node = 1 + P.Node
), GraphNode AS (
SELECT UNNEST(ARRAY[1,2,3]) AS Node
)
SELECT GraphPath
FROM GraphPath
ORDER BY GraphPath
推荐阅读
- c# - 从 db C# 中选择一些 id
- php - 添加包含类别的列表以供选择并将其保存为帖子的类别
- php - Codeigniter 查询构建器类:如何正确处理可能的意外错误?
- amazon-web-services - Master/Stage 分支推送到 AWS 上的不同环境
- java - 在系统中找不到第 6 版 - 创建项目
- r - 如何在 R 中选择列?
- php - 带有php的Mail()函数不会加载或冻结wamp服务器
- postgresql - postgres tablefunc,按产品分组的销售数据,带有月份的交叉表
- hadoop - 使用hadoop和pig对twitter数据进行情感分析
- python - 向 sympy 添加缺少的减法和除法运算符