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
......

いいえの複数の組み合わせを考慮してください。プレーヤーの。また、プレイヤーは複数のチームに所属することができます

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

私のアプリでは、特定の試合でチームとしてプレーしている一連のプレーヤーを取得します。このセットを考えると、彼らが所属する共通のチームを見つけたいと思います。複数のチームに所属している場合でも、このセットのプレーヤーのみを含むチームは一意になります。したがって、上記の例では、プレーヤー P1 P2 P3 および P4 を持つチームは 1 つだけです。しかし、チームに P1 P2 P3 の 3 人のプレーヤーしかいない場合、複数の共通チームがあります。なぜなら、組み合わせ T1(P1 P2 P3 P4) T2(P1 P2 P3) があるからです。もちろん、T1 には P4 があるので数えるべきではありませんが、正確にはどのようにすればよいのでしょうか?

これを簡単かつ効率的に行う方法 (SQL クエリまたはプログラム ロジック) を提案できますか? 共通のチーム名 (つまり T2) を取得する SQL 関数はありますか?

どんな助けでも大歓迎ですか?

4

2 に答える 2

1

この例の 4 は、セット (P1、P2、P3、P4) 内のプレーヤーの数です。このチームのすべてのプレーヤーの場合、この TeamId count(PlayerID) = セット内のすべてのプレーヤーの数:

select teamId 
from Player_Team 
where PlayerId in (P1_Id,P2_ID,P3_ID,P4_ID)
group by  teamId
having count(PlayerId) = 4
于 2012-08-23T05:53:47.723 に答える
0

私は非常によく似たものを実装しようとしていますが、上記のソリューションの問題は、
T3 P1
T3 P2
T3 P3
T3 P5
がある場合でも結果セットに表示されることだと思います。

于 2013-11-25T23:11:30.450 に答える