将用户和组添加到其他组并使用 sql 将所有层次结构置于顶部
Posted
技术标签:
【中文标题】将用户和组添加到其他组并使用 sql 将所有层次结构置于顶部【英文标题】:Add users and groups to other groups and get all the hierarchy to top using sql 【发布时间】:2014-12-14 07:40:57 【问题描述】:我想以一种可以将用户分配给组并将组分配给其他组的方式制定组策略,因此我创建了一个数据库表
table groups Type, EntityID, GroupID
用户类型可以是 1,组可以是 2
例如,如果我有一个类型为 1 和 entityID = 1
和 groupid = 2
的实体
这意味着 id 1 的用户属于 id 2 的组,依此类推,类型 2 的组也是如此
当一个组有groupID = NULL
时,这是一个根组,这意味着该组没有父组。
我想编写一个选择查询,返回用户所属组的所有层次结构
Groups
表
ID Type Entity GroupID
-----------------------
1 2 1 NULL
2 2 2 1
3 2 3 NULL
4 2 4 3
5 2 5 4
6 2 6 5
7 2 7 6
8 1 1 6
例如,最后一行包含属于组 6 的用户,组 6 属于 g5,g5 属于 g4,g4 属于 g3,g3 是根组
所以如果我运行查询,它应该返回这样的结果
Type EntityID GroupID
2 3 NULL
2 4 3
2 5 4
2 6 5
任何建议
【问题讨论】:
【参考方案1】:使用 cte
复制下面的代码
WITH UserBelongTo (Type,EntityID,GroupID)
AS
(
select a.Type, a.EntityID, a.GroupID from Groups a
where a.EntityID in (select Groups.GroupID from Groups where EntityID=1 and Type=1)
and a.Type=2
union all
select a.Type, a.EntityID, a.GroupID from Groups a
inner join UserBelongTo c on c.GroupID=a.EntityID
where a.Type=2
)
select distinct * from UserBelongTo
【讨论】:
以上是关于将用户和组添加到其他组并使用 sql 将所有层次结构置于顶部的主要内容,如果未能解决你的问题,请参考以下文章
Azure SQL - 如何将 AD 用户添加到 SQL 池数据库