我正在尝试编写一个查询,该查询从指定值开始“循环”数据库,直到条件为真。例如,假设我在 TABLE 示例中有以下条目:
id, parent, cond
1, , True
2, 1 , False
3, 1 , False
4, 2 , False
... ... ...
我想要一个以 4 作为输入的查询(例如),并将返回 2 和 1 的值。查询匹配 id 的过程,如果 cond==False,将查看父级(id = 2 )。由于第二行中的 cond = False,因此将选择“父”ID (1)。现在看第一行,因为 cond=True,LOOP 结束并返回 1 和 2。
我知道查询
SELECT parent FROM example WHERE id = 4;
将产生父 id 2。
所以我徒劳地尝试创建一个循环:
WHILE (SELECT cond FROM example) = False
LOOP SELECT parent FROM example WHERE id = 4
END LOOP;
首先,这会产生一个错误(“'while' 处或附近的语法错误”)。其次,我不知道如何在每次迭代后更新“id”。
在像 Python 这样的编程语言中,我可能会使用一个初始化为 4 的变量,然后在每次迭代时对其进行更新……不知道如何在 Postgres 中进行等效操作。
如果您有任何问题或需要更多信息,请告诉我。谢谢!