首页 > 数据库技术 > 详细

SQL Server 通过“with as”方法查询树型结构

时间:2019-08-06 12:08:35      阅读:129      评论:0      收藏:0      [点我收藏+]

一、with as 公用表表达式

  类似VIEW,但是不并没有创建对象,WITH  AS 公用表表达式不创建对象,只能被后随的SELECT语句,其作用:

  1. 实现递归查询(树形结构)

  2. 可以在一个语句中多次引用公用表表达式,使其更加简洁

二、非递归的公共表达式

  可以是定义列或自动列和select into 效果差不多

--指定列
with withTmp1 (code,cName)
as
(
    select id,Name from ClassUnis
)
select * from withTmp1
--自动列
with withTmp2 
as
(
    select * from ClassUnis
    where Author = system
)
select * from withTmp2

三、递归的方式

  通过UNION ALL 连接部分。通过连接自身whit as 创建的表达式,它的连接条件就是递归的条件。可以从根节点往下查找,从子节点往父节点查找。只需要颠倒一下连接条件。例如代码中条件改为t.ID = c.ParentId即可

with tree as(
    --0 as Level 定义树的层级,从0开始
    select *,0 as Level 
    from ClassUnis
    where ParentId is null
    union all
    --t.Level + 1每递归一次层级递增
    select c.*,t.Level + 1 
    from ClassUnis c,tree t
    where c.ParentId = t.ID
    --from ClassUnis c inner join tree t on c.ParentId = t.ID
)
select * from tree where Author not like%/%

技术分享图片

  还能通过option(maxrecursion Number) 设置最大递归次数。例如上诉结果Level 最大值为2表示递归两次。我们设置其值为1

with tree as(
    select *,0 as Level from ClassUnis where ParentId is null
    union all
    select c.*,t.Level + 1 from ClassUnis c,tree t where c.ParentId = t.ID
)
select * from tree where Author not like%/% 
option(maxrecursion 1)

 技术分享图片

 技术分享图片

 

SQL Server 通过“with as”方法查询树型结构

原文:https://www.cnblogs.com/haosit/p/11301075.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!