2013-10-03 55 views
0

enter image description hereSQL查詢自聯接

上面的表結構嗨,我有會員表。在這裏,我們可以很容易地通過柱羣ID查詢MemberIDs ..

示例...用於羣ID = 1,我們將得到的結果

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

但是,這裏我需要的是,我想名單也嵌套構件(指基團成員的成員....爲組= 2,基團= 3)

預期結果應該是這樣的

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

誰能幫我寫查詢對於這種情況? 。

+0

我不舒爾我理解您的需求。 '通過GroupID選擇*表格順序,MemberID'可能看起來像您的預期結果。 – bummi

+0

看起來'MemberID'可以表示用戶ID(可能是對不同表格列的引用)或組ID(對此表的「GroupID」的引用)。這是**不是一個好主意,因爲你將無法確保參照完整性。考慮更改設計:用戶成員和組成員應存儲在單獨的表格中(或者至少在單獨的列中)。 –

回答

0

爲什麼需要JOIN?如果我沒有弄錯,你是在處理1張桌子呢?實現這一

SELECT ObjectType, MemberID 
From Table 
Group by GroupId, ObjectType, MemberID 
Order by MemberID 
0

一種方法是使用遞歸common table expressionCTE 像這樣的事情

;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 

不過,從你的表結構目前還不清楚有一組的成員定義。

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