需求
查询树结构表(如菜单类型表,文件夹类型表等)中一个数据节点下所有的子节点数据
声明临时表,并写入数据如下
DECLARE @tbl TABLE ( Id INT ,ParentId INT ,Name VARCHAR(50) ) INSERT INTO @tbl( Id, Name, ParentId ) VALUES (1, '文件夹1', NULL) ,(2, '文件夹2', NULL) ,(3, '文件夹1-1', 1) ,(4, '文件夹1-2', 1) ,(5, '文件夹1-1-1',3) ,(6, '文件夹1-1-2',3) ,(7, '文件夹1-2-1', 4) ,(8, '文件夹2-1', 2) ,(9, '文件夹2-1-1',8)
查询需求:查询出任一文件夹及其它所包含的子文件夹。
查询方案
1. 利用CTE方式查询
;WITH CTE AS ( SELECT ID, [Name], ParentID FROM @tbl WHERE Id=1 --文件ID UNION ALL SELECT t.ID, t.[Name], t.ParentID FROM @tbl AS t JOIN CTE AS a ON t.ParentId = a.ID --这里条件不能写成 t.ID=a.ParentId,否则无法完成递归 ) SELECT * FROM CTE