在SQL中进行递归查询以级联获取数据

时间:2018-07-11 09:08:38

标签: sql recursive-query

在有一个用户表的情况下考虑。为用户分配了一个角色,并创建了一个Referer字段,该字段是具有较高角色的其他用户的ID。假设我们有5个角色,其中第5个角色较高。引荐来源ID始终是添加了该用户的用户的ID,并且只能担任更高的角色

我想让所有低于角色5的用户(从角色4开始),但是必须由用户或已经由我的用户引用的用户来引用。示例:

User1: [ role: 5, referer: 0 (because is the first user), id: 1]
User2: [ role: 4, referer: 1, id:2]
User3: [ role: 4, referer: 44, id: 3]
User4: [ role: 3, referer: 2, id: 4]
User6: [ role: 2, referer: 4, id: 5]
User7: [ role: 1, referer: 5, id: 6]
User8: [ role: 1, referer: 44, id: 7]

所以我想使用User1数据进行查询,并且响应中应该包含User2,User4,User6,User7。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

使用recursive CTE

with cte as
(Select * from tbl where id=1
union all 
Select u.id, u.role,u.referer from tbl u
join cte c on c.id = u.referer
)
Select * from cte where role <(Select role from tbl where id=1)