在此查询中,我必须列出为完全相同的球队效力的一对球员及其 playerID 和 playerName。如果一名球员为 3 支球队效力,则另一个必须为完全相同的 3 支球队效力。不多,不多。如果两名球员目前没有为任何球队效力,他们也应该被包括在内。查询应返回 (playerID1, playername1, playerID2, playerName2) 且不重复,例如如果玩家 1 信息出现在玩家 2 之前,则不应有另一个元组包含玩家 2 信息在玩家 1 之前。
例如,如果球员 A 为洋基队和红袜队效力,球员 b 为洋基队、红袜队和道奇队效力,我不应该得到他们。他们都必须为洋基队和红袜队效力,而没有其他人。现在,如果球员为任何同一支球队效力,这个查询可以找到答案。
Tables:
player(playerID: integer, playerName: string)
team(teamID: integer, teamName: string, sport: string)
plays(playerID: integer, teamID: integer)
Example data:
PLAYER
playerID playerName
1 Rondo
2 Allen
3 Pierce
4 Garnett
5 Perkins
TEAM
teamID teamName sport
1 Celtics Basketball
2 Lakers Basketball
3 Patriots Football
4 Red Sox Baseball
5 Bulls Basketball
PLAYS
playerID TeamID
1 1
1 2
1 3
2 1
2 3
3 1
3 3
所以我应该得到这个作为答案-
2, Allen, 3, Pierce
4, Garnett, 5, Perkins
.
2,阿伦,3 皮尔斯是一个答案,因为他们都只为凯尔特人和爱国者队效力。 4,加内特,5,帕金斯是一个答案,因为这两名球员都没有为应该输出的球队效力。
现在我的查询是
SELECT p1.PLAYERID,
f1.PLAYERNAME,
p2.PLAYERID,
f2.PLAYERNAME
FROM PLAYER f1,
PLAYER f2,
PLAYS p1
FULL OUTER JOIN PLAYS p2
ON p1.PLAYERID < p2.PLAYERID
AND p1.TEAMID = p2.TEAMID
GROUP BY p1.PLAYERID,
f1.PLAYERID,
p2.PLAYERID,
f2.PLAYERID
HAVING Count(p1.PLAYERID) = Count(*)
AND Count(p2.PLAYERID) = Count(*)
AND p1.PLAYERID = f1.PLAYERID
AND p2.PLAYERID = f2.PLAYERID;
我不是 100% 确定,但我认为这可以找到为同一支球队效力的球员,但我想找出为上述相同球队效力的球员
我被困在如何处理它之后。有关如何解决此问题的任何提示。谢谢你的时间。