SqlServer同一个表查询无限层级的数据
创建table表,表结构如下,Id,ParentId,username,levels查询指定条件的所有下级或者所有上级,用WITH AS,UNION ALL 查询
1 CREATE TABLE [dbo].[table] ( 2 [Id] int NOT NULL IDENTITY(1,1) , 3 [UserName] varchar(20) NULL , 4 [Levels] int NULL , 5 [Parentid] int NULL 6 )
插入以下数据进行测试
查询parentid=4的所有下级
1 WITH T 2 AS( 3 SELECT * FROM table WHERE ParentId=4 4 UNION ALL 5 SELECT tab.* FROM table tab INNER JOIN T ON tab.ParentId=T.Id 6 ) 7 SELECT * FROM T
查询结果如下
查询Id=8的所有上级
1 WITH T 2 AS( 3 SELECT * FROM table WHERE Id=8 4 UNION ALL 5 SELECT tab.* FROM table tab INNER JOIN T ON tab.Id=T.ParentId 6 ) 7 SELECT * FROM T
查询结果如下