2015-10-16 31 views
0

假設我有以下交集表MemberClub:WHERE條件交集表

MemberID | ClubId 
1  | 2 
2  | 1 
2  | 2 
2  | 3 

我想獲得它是在俱樂部與ID的所有成員1 2.所以結果應該成爲ID 2的成員。

我的where語句將如何顯示?我嘗試了不同的變化,但我不確定選擇哪一個。

預期的輸出應該是:

MemberID | ClubId 
2  | 1 
2  | 2 

我需要它適用於俱樂部的靈活數量柔性版(這可能是因爲我希望所有會員在俱樂部是隻有ID爲1或者所有成員是在俱樂部ID 2,4 6)。

+0

你問像「WHERE MemberID = 2和clubID IN(1,2)」 – PK20

+0

沒有。執行前我不知道MemberID。我希望所有會員都在俱樂部ID 1和2. – mosquito87

+1

俱樂部俱樂部ID 1和2或者會員ID 1和2。你能給我們預期的結果,所以我們很容易幫你 – PK20

回答

1

一般GROUP BYHAVING COUNT(DISTINCT)解決方案:

select MemberID 
from MemberClub 
WHERE ClubId IN (1,2) 
GROUP BY MemberID 
HAVING COUNT(DISTINCT ClubId) = 2 

即確保用戶有兩種不同的ClubId

此外,請確保有不同ClubId的爲用戶(工作只是兩個俱樂部的情況下):

select MemberID 
from MemberClub 
WHERE ClubId IN (1,2) 
GROUP BY MemberID 
HAVING max(ClubId) <> min(ClubId) 

或者跳過GROUP BY,做一個自我JOIN來代替:

select distinct m1.MemberID 
from MemberClub m1 
    join MemberClub m2 on m1.MemberID = m2.MemberID 
where m1.ClubId = 1 
    and m2.ClubId = 2 

要返回所有俱樂部的會員:

select MemberID 
from MemberClub 
GROUP BY MemberID 
HAVING COUNT(DISTINCT ClubId) = (select count(distinct ClubId) from MemberClub) 
+0

有更靈活的方法嗎?第一個版本只適用於兩個俱樂部。什麼時候他們應該在俱樂部1,3和4?第二個不適用於我猜測的一個俱樂部。 – mosquito87

+0

在這種情況下使用第一個查詢,更加靈活和易於調整。 – jarlh

+0

第一個只適用於2個俱樂部。不夠靈活。我總是必須找出俱樂部的數量。 – mosquito87