我有一个表content_folder_tbl
,其中包含使用folder_id
和parent_id
定义的所有文件夹和子文件夹的列表
我希望在定义根folder_id
后获取所有文件夹ID。
作为一种解决方法,我提出了这个问题:
select *
from content_folder_tbl
where folder_id in (select folder_id
from content_folder_tbl
where parent_id = 73
UNION
Select folder_id
from content_folder_tbl
where parent_id in (select folder_id
from content_folder_tbl
where parent_id = 73)
Union
Select folder_id
from content_folder_tbl
where parent_id in (Select folder_id
from content_folder_tbl
where parent_id in (select folder_id
from content_folder_tbl
where parent_id = 73))
)
它完全返回我想要的内容,但它是多余的,仅当我有3个级别的文件夹时才有效。
如何重写此查询以返回任何级别的值(看起来我需要一个递归方法)?
在这种情况下, 73
是根folder_id
预期结果的示例:
答案 0 :(得分:3)
尝试这个 -
;WITH cte AS
(
SELECT *
FROM dbo.content_folder_tbl
WHERE folder_id = 73
UNION ALL
SELECT t2.*
FROM cte t1
JOIN dbo.content_folder_tbl t2 ON t1.folder_id = t2.parent_id
)
SELECT *
FROM cte
OPTION (MAXRECURSION 0)