我有一个(几乎)邻接列表postgres表,它使用如下关系:
Id.A Id.B
1 4
2 3
1 5
5 6
7 8
3 4
5 7
,并提供:
1
/ \
5 4
/ \ \
6 7 3
\ \
8 2
我希望找到值最小的节点。它不一定是根,因为它并不存在。我需要以某种方式从任何点遍历图形并找到具有最小值的节点。问题在于目前的情况,而不是每个人说的邻接表。
我很确定这必须使用递归CTE,但不知道从哪里开始。
而且,我认为我在这里可能不太清楚,有很多这些图都在同一个表中混淆,而不仅仅是一个图,所以对于每一行,它需要遍历它自己的图找到自己的最小值节点。
非常感谢任何帮助,谢谢。
答案 0 :(得分:0)
根节点是id.b
中没有显示的唯一节点,所以让我们从那里开始递归:
WITH RECURSIVE roots(root, child) AS (
SELECT a, a FROM id
EXCEPT
SELECT b, b FROM id
UNION ALL
SELECT r.root, id.b
FROM roots r
JOIN id ON r.child = id.a
) SELECT root, child FROM roots;