我有一个表阶段有2列,记录就是这样
我需要的输出是:
在第1行和第2行以及第2行和第3行,但输出I需要1,2,3。 如何解决这类问题,请提供查询和建议。
答案 0 :(得分:1)
使用递归CTE处理SQL中的树结构。
我正在使用名为path的CTE来计算各种链接项。 联盟的第一部分查找所有路径开始(c1值不存在的项目作为另一行的v2值)。
第二部分遵循结束的路径。它不断添加路径文本字段的每个连接。
with recursive paths as
(
-- find start points (store start in root)
select c1 as root, c2, c1 || ',' || c2 as path, 1 as len
from stage where not exists (select * from stage t2 where t2.c2 = stage.c1)
union all
-- add the next item to the path
select paths.root, stage.c2, paths.path || ',' || stage.c2, len+1 from paths
inner join stage on paths.c2 = stage.c1
)
select path from paths
where
-- only choose longest path from each start point
not exists (select * from paths x where x.len > paths.len and x.root = paths.root)
order by path
最后,我找到了每个起始点(根)找到的最长路径。
CTE记录在https://www.postgresql.org/docs/9.6/static/queries-with.html