下表是我的菜单主表,菜单深度不受限制。每个菜单可以有一个子菜单和一个子子菜单等等。
我面临的问题是获取具有相同顶级父级的所有项目。
一种解决方案是在父级不为空时进行循环,第二种解决方案是创建一个具有父级 id 的视图以及所有带有逗号分隔列的子菜单 id。
然后一个选择命令将给出父 ID。我的表如下:
CategoryID | ParentID
1 | null
2 | null
3 | 1
4 | 1
5 | 2
6 | 2
7 | 3
Run Code Online (Sandbox Code Playgroud)
输出应该是
CategoryID | AllRelatedCategory
1 | 1,3,4,7
2 | 2,5,6
Run Code Online (Sandbox Code Playgroud)
我当前的代码如下。问题是它仅适用于 3 个层次结构。
;with cte as
(
select a.CategoryID col1, convert(varchar, a.CategoryID) col2, a.ParentID
from [dbo].[TB_CATEGORY_MASTER] a where a.ParentID is null
union
select a.CategoryID col1, (convert(varchar, isnull(b.CategoryID,''))) col2, a.ParentID
from [dbo].[TB_CATEGORY_MASTER] a
left join [dbo].[TB_CATEGORY_MASTER] b on a.CategoryID=b.ParentID …Run Code Online (Sandbox Code Playgroud) sql-server ×1