飞天 发表于 3 天前

9.0.103 取每一个角色所含的下层角色

我想写一个数据库查询语句,能够列出每一个角色所含的下层角色(含下层的下层。。。。直到最底层),自已写出来都不对。

有谁写过能分享下吗
------------------------------------------------------------------------------------------------

WITH RecursiveRoles AS (
    -- 基础情况:选择所有顶级角色(没有父角色的角色)
    SELECT RoleId, RoleName, RoleId AS OriginalRoleId, 0 AS Level
    FROM webpages_Roles
    WHERE RoleId NOT IN (SELECT InheritedRoleId FROM role_inherited)

    UNION ALL

    -- 递归部分:选择所有子角色
    SELECT ri.InheritedRoleId, wr.RoleName, rr.OriginalRoleId, rr.Level + 1
    FROM role_inherited ri
    INNER JOIN webpages_Roles wr ON ri.InheritedRoleId = wr.RoleId
    INNER JOIN RecursiveRoles rr ON ri.RoleId = rr.RoleId
)
SELECT L.Level, L.OriginalRoleId, R.RoleName, L.RoleId, L.RoleName
FROM RecursiveRoles L left outer joinwebpages_Roles R ON L.OriginalRoleId = R.RoleId
--WHERE L.OriginalRoleId <> L.RoleId
ORDER BY L.Level, R.RoleName,L.RoleName;

Lay.Li 发表于 前天 10:07

大佬,sql我们不是很擅长哈,不过看您的这个需求,可以考虑使用服务端命令递归去查询,可以参考下方的帖子


一看就会,超有用活字格技能:一百零五、活字格的更多可能性,用服务端命令实现递归
https://gcdn.grapecity.com.cn/showtopic-83594-1-1.html
(出处: 葡萄城开发者社区)


或者您也可以在网上查找相关的sql语句去做


页: [1]
查看完整版本: 9.0.103 取每一个角色所含的下层角色