Select 层次结构查询 Table PostgreSQL
Select query on a Hierarchy Table PostgreSQL
我试图在 postgreSQL 中进行递归 select 查询,我试着阅读了几篇文章,但我无法真正从中找到解决方案...要么是多table 层次结构或另一种方言,然后我无法将其翻译成 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 只是为了尝试一下。所以基本上假设我有一个 table 像这样
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;
我试图在 postgreSQL 中进行递归 select 查询,我试着阅读了几篇文章,但我无法真正从中找到解决方案...要么是多table 层次结构或另一种方言,然后我无法将其翻译成 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 只是为了尝试一下。所以基本上假设我有一个 table 像这样
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;