在层次结构表PostgreSQL上选择查询

问题描述 投票:0回答:1

我试图在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的招聘者子角色。我在做什么错?

sql postgresql hierarchical-data recursive-query
1个回答
0
投票

您需要在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;
© www.soinside.com 2019 - 2024. All rights reserved.