【发布时间】:2017-02-14 03:59:38
【问题描述】:
我的名为 element 的表格如下所示:
id | successor | important
----------------------------
1 | NULL | 0
2 | 4 | 1
3 | 5 | 0
4 | 8 | 0
5 | 6 | 1
6 | 7 | 0
7 | NULL | 0
8 | 10 | 1
9 | 10 | 0
10 | NULL | 0
我从一个元素的 ID 开始。每个元素可能有也可能没有后续元素。因此,给定任何元素 ID,我可以从 0..n 个元素构建一个元素链,具体取决于其后继者和后继者,依此类推。
假设我的起始 ID 是 2。这会产生以下链:
2 -> 4 -> 8 -> 10
现在我想问这个问题:一个特定的元素链是否至少包含一个重要== 1的元素?
在伪代码中,无需不必要检查即可实现这一点的函数可能如下所示:
boolean chainIsImportant(element)
{
if (element.important == 1) {
return true;
}
if (element.successor != NULL) {
return chainIsImportant(element.successor);
}
return false;
}
我想这可以通过WITH RECURSIVE 来实现,对吧?找到重要 == 1 的元素后,如何停止递归?
【问题讨论】:
标签: sql postgresql recursion recursive-query