Sql 如何获取匹配的数据库记录

Sql 如何获取匹配的数据库记录,sql,database,logic,Sql,Database,Logic,涉及3个DB表 玩家 P1 P2 P3 P4 P5 ..... 团队 T1 T2 T3 T4 T5 .... T1 P1 T1 P2 T1 P3 T1 P4 T2 P1 T2 P2 T2 P3 ...... 球员团队 T1 T2 T3 T4 T5 .... T1 P1 T1 P2 T1 P3 T1 P4 T2 P1 T2 P2 T2 P3 ...... 考虑玩家数量的多重组合

涉及3个DB表

玩家

P1
P2
P3
P4
P5
.....
团队

T1
T2
T3
T4
T5
....
T1     P1
T1     P2
T1     P3
T1     P4
T2     P1
T2     P2
T2     P3
......
球员团队

T1
T2
T3
T4
T5
....
T1     P1
T1     P2
T1     P3
T1     P4
T2     P1
T2     P2
T2     P3
......
考虑玩家数量的多重组合。此外,一名球员可以在多个团队中

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)


非常感谢您的帮助。

您应该使用此查询,其中本例中的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

您应该使用此查询,其中本例中的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

我正在尝试实现一些非常类似的东西,我认为上述解决方案的问题在于如果您有
T3 P1
T3 P2
T3 P3
T3 P5

它仍然会出现在结果集中。

我正在尝试实现一些非常类似的东西,我认为上述解决方案的问题在于如果您有
T3 P1
T3 P2
T3 P3
T3 P5
它仍然会出现在结果集中