SQL Server如何通过with as方法查询树型结构,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

一、with as 公用表表达式

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

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

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

二、非递归的公共表达式

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

--指定列withwithTmp1(code,cName)as(selectid,NamefromClassUnis)select*fromwithTmp1--自动列withwithTmp2as(select*fromClassUniswhereAuthor='system')select*fromwithTmp2

三、递归的方式

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

withtreeas(--0asLevel定义树的层级,从0开始select*,0asLevelfromClassUniswhereParentIdisnullunionall--t.Level+1每递归一次层级递增selectc.*,t.Level+1fromClassUnisc,treetwherec.ParentId=t.ID--fromClassUniscinnerjointreetonc.ParentId=t.ID)select*fromtreewhereAuthornotlike'%/%'

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

withtreeas(select*,0asLevelfromClassUniswhereParentIdisnullunionallselectc.*,t.Level+1fromClassUnisc,treetwherec.ParentId=t.ID)select*fromtreewhereAuthornotlike'%/%'option(maxrecursion1)

关于SQL Server如何通过with as方法查询树型结构问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。