2016-06-12 30 views
1

我必須得到成員是五個不同的羣體和團體應該有5名成員每個如何在SQL Server中放置兩個條件?

  • Member(idMember,nameMember)
  • Group(idGroup)
  • Belongs(idMember,idGroup)

團體有會員,會員在團隊中,會員可以在他想要的團體數量之內,但是會員不能在同一團體中兩次。

我做了類似

select idMember, nameMember 
from Member m, Group g 
where idMember in (select b.idMember 
        from Belongs b) 
group by idMember, nameMember 
having (select count(*) 
     from Belongs b 
     where b.idMember = m.idMember)>5 
     and 
     (select count (*) 
     from Belongs b 
     where b.idGroup = g.idGroup /*??*/)>5 

而且我不知道如何與同組屬於

+1

你可以添加一些示例數據和預期輸出 –

+0

是啊,我正要然後我意識到我不得不做出像批量數據並手動縮進它是一種痛苦,是否有一種更簡單的方法來製作它? –

+0

從不在'from'子句中使用逗號。 –

回答

4

方法步驟這種類型的問題。如果你想限制

select b.idGroup 
from belongs b 
group by b.idGroup 
having count(*) = 5; 

(有趣的對稱。)

:下面獲取在五組的成員:

select b.idMember 
from belongs b -- Note: `group` is a reserved word so a bad name for a table 
group by b.idMember 
having count(*) = 5; 

下獲取有五名成員組首先查詢到第二組中的組,然後一個簡單的方法是使用in

select b.idMember 
from belongs b 
where b.groupId in (select g.idGroup 
        from belongs b 
        group by b.idGroup 
        having count(*) = 5 
        ) 
group by b.idMember 
having count(*) = 5; 

當你處理複雜的查詢時,一次構建一個步驟。

注:group是一個非常糟糕的名字,因爲它是一個保留字。而且,如果你想要表名,那麼使用JOIN加入到members表中以得到正確的名字。

編輯:

您可以使用joinmember得到列:

select b.idMember, m.name 
from belongs b join 
    member m 
    on b.idMember = m.idMember 
where b.groupId in (select g.idGroup 
        from belongs b 
        group by b.idGroup 
        having count(*) = 5 
        ) 
group by b.idMember, m.name 
having count(*) = 5; 
+0

非常感謝,這比我想象的要簡單 –

+0

我嘗試過應用它,但我似乎無法從會員列表中選擇列,並且在這裏發佈的內容可以幫助我嗎? –