我正在尝试编写一个递归 PostgreSQL 函数,其基本内容是:
- 获取群组 ID
- 如果该组中有一个项目,则返回它
- 如果不是,则查找该组的子组
- 在每个子组上重复该功能
该函数接受组 ID 和要查找的项目的标题,到目前为止,我所得到的函数主体内容如下:
RETURN QUERY SELECT -- ... return children with title, if any
-- If there were none, look for grandchildren (and so on)
IF NOT FOUND THEN
-- Loop through the sub-group IDs
FOR sub_group_id IN
SELECT -- ... sub-groups of the provided group
LOOP
-- Recursion time ... stuck here
我想要表达的是:
- 跑步
SELECT * FROM this_function(sub_group_id, title)
; - 如果返回 > 0 个结果,则返回这些结果
- 如果没有,则继续循环
但如果我只能说:
LOOP
RETURN QUERY SELECT * FROM this_function(sub_group_id, title);
它没有达到预期的效果。有人能帮我在 PostgreSQL 中表达上述内容吗?
您可以编写递归 SQL,不需要为此使用函数:
小提琴
如果你需要一个函数,你当然可以将递归 SQL 包装成一个函数:
小提琴