SQL Server 通过with as方法查询树型结构
一、withas公用表表达式
类似VIEW,但是不并没有创建对象,WITHAS公用表表达式不创建对象,只能被后随的SELECT语句,其作用:
1.实现递归查询(树形结构)
2.可以在一个语句中多次引用公用表表达式,使其更加简洁
二、非递归的公共表达式
可以是定义列或自动列和selectinto效果差不多
--指定列 withwithTmp1(code,cName) as ( selectid,NamefromClassUnis ) select*fromwithTmp1 --自动列 withwithTmp2 as ( select*fromClassUnis whereAuthor='system' ) select*fromwithTmp2
三、递归的方式
通过UNIONALL连接部分。通过连接自身whitas创建的表达式,它的连接条件就是递归的条件。可以从根节点往下查找,从子节点往父节点查找。只需要颠倒一下连接条件。例如代码中条件改为t.ID=c.ParentId即可
withtreeas( --0asLevel定义树的层级,从0开始 select*,0asLevel fromClassUnis whereParentIdisnull unionall --t.Level+1每递归一次层级递增 selectc.*,t.Level+1 fromClassUnisc,treet wherec.ParentId=t.ID --fromClassUniscinnerjointreetonc.ParentId=t.ID ) select*fromtreewhereAuthornotlike'%/%'
还能通过option(maxrecursionNumber)设置最大递归次数。例如上诉结果Level最大值为2表示递归两次。我们设置其值为1
withtreeas( select*,0asLevelfromClassUniswhereParentIdisnull unionall selectc.*,t.Level+1fromClassUnisc,treetwherec.ParentId=t.ID ) select*fromtreewhereAuthornotlike'%/%' option(maxrecursion1)
好了这篇文章就介绍到这了,希望能帮助到你。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。