在这个查询中,我必须列出一对玩家ID和玩家名称的球员,他们为同一支球队效力.如果一名球员为3支球队效力,则另一支球员必须参加完全相同的3支球队.不能少,不多了.如果两名球员目前不参加任何球队,他们也应该被包括在内.查询应该返回(playerID1,playername1,playerID2,playerName2)而没有重复,例如如果玩家1信息在玩家2之前出现,则不应该有另一个玩家2信息在玩家1之前出现的元组.
例如,如果玩家A为洋基队和红袜队队员比赛,而队员队员为洋基队队员,红袜队队员和道奇队队员队效力,我就不应该参加比赛.他们都必须为洋基队和红袜队效力,而不是其他人.现在,如果玩家为同一个团队玩游戏,此查询会找到答案.
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
Run Code Online (Sandbox Code Playgroud)
所以我应该把它作为答案 -
2, Allen, 3, Pierce
4, Garnett, 5, Perkins
Run Code Online (Sandbox Code Playgroud)
.
2,艾伦,3皮尔斯是一个snwer,因为他们都只参加CELTICS和PATRIOTS 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;
Run Code Online (Sandbox Code Playgroud)
我不是百分百肯定,但我认为这会找到为同一支球队效力的球员,但是我想找出那些仅为所有相同球队效力的球员,如上所述
在此之后,我被困在如何接近它.有关如何解决此问题的任何提示.谢谢你的时间.
我想到了两种可能的解决方案:
您能否提供一些示例数据以便我创建示例?
| 归档时间: |
|
| 查看次数: |
70377 次 |
| 最近记录: |