代码之家  ›  专栏  ›  技术社区  ›  Osakr

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

  •  0
  • Osakr  · 技术社区  · 6 年前

    在有用户表的场景中思考。用户分配了一个角色和一个referer字段,该字段是具有更高角色的其他用户的ID。假设我们有5个角色,第五个是高一个。referer 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 回复  |  直到 6 年前
        1
  •  2
  •   Ajay Gupta    6 年前

    使用 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)