22,210
社区成员
发帖
与我相关
我的任务
分享
DECLARE @father_id INT
SET @father_id=1
;WITH CTETree
AS ( SELECT *
FROM tab_class AS t
WHERE t.father_id=@father_id
UNION ALL
SELECT t.*
FROM tab_class AS t
INNER JOIN CTETree AS t2 ON t.father_id = t2.class_id
)
SELECT *
FROM CTETree
OPTION ( MAXRECURSION 0 );
--测试数据
if not object_id(N'Tempdb..#tab_class') is null
drop table #tab_class
Go
Create table #tab_class([class_id] int,[Class_name] nvarchar(23),[father_id] int)
Insert #tab_class
select 1,N'测试1',0 union all
select 2,N'测试2',1 union all
select 3,N'测试3',1 union all
select 4,N'测试4',3 union all
select 5,N'测试5',4
Go
--测试数据结束
;WITH cte AS (
Select * from #tab_class WHERE class_id=3
UNION ALL
SELECT #tab_class.* FROM #tab_class JOIN cte ON cte.class_id = #tab_class.father_id
)
SELECT * FROM cte
;WITH CTETree
AS ( SELECT *
FROM tab_class AS t
WHERE NOT EXISTS ( SELECT 1
FROM tab_class
WHERE class_id = t.father_id )
UNION ALL
SELECT t.*
FROM tab_class AS t
INNER JOIN CTETree AS t2 ON t.father_id = t2.class_id
)
SELECT *
FROM CTETree
OPTION ( MAXRECURSION 0 );