主页 > 知识库 > SQL Server 通过with as方法查询树型结构

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

热门标签:智能语音外呼系统选哪家 优质地图标注 外呼系统电销专用 武汉长沙外呼系统方法和技巧 奥威地图标注多个地方 怎样在地图上标注路线图标 百度地图标注不同路线 京华物流公司地图标注 千呼电销机器人价格

一、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使用介绍

标签:铜仁 威海 益阳 天水 来宾 七台河 宿州 防疫战设

巨人网络通讯声明:本文标题《SQL Server 通过with as方法查询树型结构》,本文关键词  SQL,Server,通过,with,方法,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《SQL Server 通过with as方法查询树型结构》相关的同类信息!
  • 本页收集关于SQL Server 通过with as方法查询树型结构的相关信息资讯供网民参考!
  • 推荐文章