SqlServer 递归查询树形数据

来源:http://www.sh-fengwen.com 作者:气血双补 人气:126 发布时间:2019-09-06
摘要:1 DECLARE @ParentId NVARCHAR(36); 2 SET @ParentId = '078499bf-dedd-b293-4653-7bf6a2e54cbb'; 3 4 WITH [Temp] AS 5 ( 6 SELECT [A].* FROM [dbo].[Contacts] A WHERE [A].[ParentID] = @ParentId AND [A].[IsDefault] = 1 7 UNION ALL 8 SELECT [A].* FR
 1 DECLARE @ParentId NVARCHAR(36);
 2 SET @ParentId = '078499bf-dedd-b293-4653-7bf6a2e54cbb';
 3 
 4 WITH [Temp] AS
 5 (
 6     SELECT [A].* FROM [dbo].[Contacts] A WHERE [A].[ParentID] = @ParentId AND [A].[IsDefault] = 1
 7     UNION ALL
 8     SELECT [A].* FROM [dbo].[Contacts] A INNER JOIN [Temp] B ON A.[ParentID] = B.[ObjectID] AND [A].[IsDefault] = 1
 9 )
10 SELECT * FROM [Temp] ORDER BY [Temp].[GlobalSort] ASC;

一直没有在意过数据库处理树形数据的重要性,直到有一天朋友问起我关于树形数据查询的问题时才发现根本不会,正好这个时候也要用到递归进行树形数据的查询于是在网上查了一圈,语法总结如下

参考文献:

 

一:简单的树形数据 代码如下:

-- with一个临时表(括号中是你要查询的列名)
with temp(ID,PID,Name,curLevel)
as
(
--1:初始查询(这里的PID=-1 在我的数据中是最底层的根节点)
select ID,PID,Name,1 as level from dbo.T_ACL_OU 
where Deleted = 0 and PID = -1     
union all
--2:递归条件
select a.ID,a.PID,a.Name, b.curLevel+1from T_ACL_OU a   --3:这里的临时表和原始数据表都必须使用别名,不然递归的时候不知道查询的是那个表的列
inner join
temp b
on ( a.PID=b.id)  --这个关联关系很重要,一定要理解一下谁是谁的父节点
)
select * from temp   --4:递归完成后 一定不要少了这句查询语句 否则会报错

效果如图:

图片 1
这里要注意的地方是注释中的 1——4 的部分

二:带缩进的树形数据 代码如下:

本文由美高梅游戏平台网站发布于气血双补,转载请注明出处:SqlServer 递归查询树形数据

关键词:

上一篇:没有了

下一篇:没有了

最火资讯