我试图在postgreSQL中进行递归选择查询,我尝试阅读一些文章,但是我无法真正从中获得解决方案……它是多表层次结构,还是我使用的另一种方言无法翻译成Postgres。
这是我现在想出的,但似乎只检索到一列,所以有些工作不正常
WITH RECURSIVE authorities(role_id, role_name, fk_above_role) AS (
SELECT role_id,role_name,fk_above_role
FROM roles
WHERE role_id=1
UNION ALL
SELECT h.id_role, h.role_name, h.fk_above_role
FROM roles h
WHERE h.role_id= h.fk_above_role
)
SELECT * FROM authorities LIMIT 2;
我已将限制设置为2,仅供尝试。所以基本上可以说我有一个像这样的桌子
role_id | role_name | fk_above_role
1 HRManager null
2 Recruiter 1
在这种情况下,我进行的递归查询是检索所有HRManager子角色,我该怎么做?最终,我还需要获得被视为HRManager sub_roles的招聘者子角色。我在做什么错?
您需要在UNION的递归部分中加入递归CTE:
WITH RECURSIVE authorities(role_id, role_name, fk_above_role) AS (
SELECT role_id,role_name,fk_above_role
FROM roles
WHERE role_id = 1
UNION ALL
SELECT child.id_role, child.role_name, child.fk_above_role
FROM roles child
JOIN authorities parent on child.fk_above_rold = parent.role_id
)
SELECT *
FROM authorities LIMIT 2;