2012-08-23 65 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
它仍然会拿出结果集。