2012-08-23 68 views
1

有3個數據庫表涉及。如何獲得匹配的db記錄

玩家

P1 
P2 
P3 
P4 
P5 
..... 

T1 
T2 
T3 
T4 
T5 
.... 

Player_Team

T1  P1 
T1  P2 
T1  P3 
T1  P4 
T2  P1 
T2  P2 
T2  P3 
...... 

考慮多個C沒有的組合。的球員。此外,玩家可以在多個團隊

Ex. (P1 P2 P3 P4), (P1 P2 P3), (P1 P2), (P1 P3), (P2 P3) .. so on 

在我的應用程序,我得到了一組球員在一個特定的比賽作爲一個團隊打。鑑於這一套,我想找到他們屬於的共同團隊。即使他們在多個球隊中,只包含這一組球員的球隊也是獨一無二的。所以在上面的例子中,只有一個隊員擁有隊員P1 P2 P3和P4。但是如果球隊只有3名球員P1 P2 P3,那麼我們有不止一個共同球隊。因爲我們可能有組合T1(P1 P2 P3 P4)T2(P1 P2 P3)。當然,我們不應該算T1,因爲它有P4,但我們應該怎麼做呢?

那麼你可以建議一種方法(SQL查詢或程序邏輯)來做到這一點容易和有效? 是否有任何SQL函數來獲得常用的團隊名稱(即T2)?

任何幫助非常感謝?

回答

1

你應該使用這個查詢,其中4在這個例子中是一組玩家的數量(P1,P2,P3,P4)。如果在這個團隊中的所有玩家,然後爲這個TeamId計數(PlayerID)=數的集合中的所有玩家:

select teamId 
from Player_Team 
where PlayerId in (P1_Id,P2_ID,P3_ID,P4_ID) 
group by teamId 
having count(PlayerId) = 4 
0

我想實現一些非常相似,我想與上述解決方案的問題是,如果你有
T3 P1
T3 P2
T3 P3
T3 P5
它仍然會拿出結果集。