我有类似于此的表结构
我想使用sql查询构建权限树。
以下是示例输入/输出列表
有没有办法在没有游标的情况下使用sql查询来提取这些数据?
注意:整个表结构向下钻取到此树
这里的目标是显示给定节点的每个子节点。
答案 0 :(得分:2)
您可以使用自引用公用表表达式和STUFF来获取所需的输出。可以使用顺序字符串完成排序。如果有更多的话,我会用一个例子来编辑答案。
declare @emps table (uid int, boss int);
insert into @emps (uid,boss)
values (1,6),(2,6),(3,6),(4,6),(5,6),(7,9),(8,9),(6,15),(9,15),(15,20),(17,20);
declare @user int = 20;
declare @output varchar(100) = '';
WITH cte (uid,ord)
AS ( SELECT uid, 0
FROM @emps
WHERE boss = @user
UNION ALL
SELECT e.uid, cte.ord + 1
FROM @emps e
INNER JOIN cte ON cte.uid = e.boss)
SELECT @output = @output + convert(varchar,uid) + ','
FROM cte
order by ord
select @output