0

在此处输入图像描述

嗨,我有上面表格结构的成员表。在这里,我们可以通过 GroupID 列轻松查询 MemberID ..

示例...对于 GroupID=1,我们将得到结果

ObjectType    MemberID
-----------------------------
  user         1
  user         2
  group        2
  group        3

但是,在这里我需要的是,我还想列出嵌套成员(表示组成员的成员 ....for group =2,group=3)

预期的结果应该是这样的

ObjectType    MemberID
-----------------------------
  user         1
  user         2
  group        2
  group        3
  user         4
  group        3
  user         7

任何人都可以帮我写这个案例的查询吗?

4

3 回答 3

0

为什么需要 JOIN?如果我没记错的话,你正在处理 1 张桌子本身?

SELECT ObjectType, MemberID
From   Table
Group by GroupId, ObjectType, MemberID
Order by MemberID
于 2013-10-03T11:57:58.960 回答
0

实现此目的的一种方法是使用递归common table expression或类似的CTE 东西

;with cte as 
(
    select *, groupid as mastergroup,1 as level from yourtable 
    union all       
    select t1.memberid, t1.objecttype, null, cte.mastergroup, level+1
    from cte 
        inner join yourtable t1
            on t1.groupid=cte.memberid
    where cte.objecttype='g'
) 
select * from cte
where mastergroup=1

但是,从您的表结构来看,尚不清楚组的成员是如何定义的。

于 2013-10-03T12:00:37.000 回答
0

你可以在这里使用 CTE

    ;WITH tableResult (ObjectType, ObjectType)
AS
(
-- Anchor member definition
SELECT TD.ObjectType, TD.ObjectType
FROM yourtableAS TD   
    UNION ALL
-- Recursive member definition
SELECT TD.ObjectType, TD.ObjectType
FROM TaskDependency AS TD
INNER JOIN tableResult AS TR
    on TD.groupid= TR.memberid 
        and TR.objecttype='group'
    )

--then select from this cte
Select * from tableResult 
于 2013-10-03T12:04:58.683 回答