在有一个用户表的情况下考虑。为用户分配了一个角色,并创建了一个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。
任何帮助将不胜感激。
答案 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)