分享

sql 递归查询

 johnny_net 2019-04-11

适用场景:

单个表中存在类似ID和PID的字段,即子集和父集存在同一个表中,才有机会使用递归。

递归的过程也会使用到表的自连接。e.g

IDPidDeptLevelDeptName

10     1                 总部                                                

21     2                 研发部                                               

31     2                 测试部                                               

41     2            质量部                                               

52     3            小组1                                               

62     3            小组2                                               

73     3            测试1                                               

83     3            测试2                                               

95     3            前端组                                               

105     3            美工                   

使用下列语句:

with cte as(

select id,pid,deptlevel,deptname from department where id=2

union all

select d.id,d.pid,d.deptlevel,d.deptname from cte c inner join department d

on c.id=d.Pid

)

select * from cte

简单分析一下:

  1. 最外层使用cte递归,使用后应该紧跟查询语句,否则有语法错误                             

  2. 看到内部有个union all 这个东西是用作集合拼接的,字段结构应该都保持一样,第二句可以理解为递归函数

  3. 第二句相当于把id=2的记录带入进去,一个自连接查询,查出pid=2的两条记录,然后再对这两个记录进行递归,依次类推直到查不出记录。

    结果为:                                        

    idpiddeptleveldeptname

    21     2         研发部                                               

    52     3         小组1                                               

    62     3         小组2                                               

    95     3         前端组                                               

    105     3         美工                                                

  4. 也可以使用select * from cte option(maxrecursion 2) (限制递归次数)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多