我刚刚审核了这个question,但我需要的是完全不同的东西。
但是,我有这张表:
team_players_order
(team_id,
player_id,
ordering,
captain
)
该表存储了团队ID的列表以及属于每个团队的玩家ID(每个团队可以获得0-15个玩家)。我想得到的是那些拥有共同球员的球队。
我想要比较的团队列表(我有他们的ID)或未知,然后我可能需要搜索整个表并比较所有团队。 。
以下是三个团队的示例数据:
team_id player_id ordering captain
117 134 0 N
117 55 1 N
117 97 2 N
117 215 3 N
117 165 4 N
117 221 5 N
117 163 6 N
117 128 7 N >> common player
117 180 8 N
117 96 9 N
117 162 10 N
117 88 11 N
117 229 12 N
117 91 13 N
117 105 14 N
-----------------------------------------------
124 88 0 N
124 165 1 N
124 92 2 N
124 130 3 N
124 47 4 N
124 221 5 N
124 30 6 N
124 223 7 N
124 105 8 Y
124 6 9 N
124 96 10 N
124 120 11 N
124 198 12 N
124 128 13 N >> common player
124 202 14 N
-----------------------------------------------
125 256 0 N
125 58 1 N
125 10 2 N
125 47 3 N
125 103 4 N
125 167 5 N
125 221 6 N
125 128 7 N >> common player
125 105 8 N
125 96 9 Y
125 180 10 N
125 210 11 N
125 229 12 N
125 30 13 N
125 33 14 N
正如你所看到的,球员128是这三支球队中的常见球员。我还需要找到其他常见的球员。
我到目前为止所尝试的是以下查询,我想这是将每个给予团队与所有其他团队进行比较,并获得每个比较中单独存在的任何普通玩家。
SELECT
t1.team_id,
t1.player_id,
t2.team_id,
t2.player_id
FROM team_players_order AS t1
INNER JOIN team_players_order AS t2
ON (t1.team_id != t2.team_id
AND t1.player_id = t2.player_id)
WHERE t1.team_id IN(117,124,125)
AND t2.team_id IN(117,124,125)
ORDER BY t1.team_id, t2.team_id
返回:
team_id player_id team_id player_id
117 221 124 221
117 88 124 88
117 96 124 96
117 105 124 105
117 128 124 128
117 165 124 165
117 180 125 180
117 221 125 221
117 229 125 229
117 96 125 96
117 105 125 105
117 128 125 128
124 128 117 128
124 165 117 165
124 221 117 221
124 88 117 88
124 96 117 96
124 105 117 105
124 128 125 128
124 30 125 30
124 221 125 221
124 47 125 47
124 96 125 96
124 105 125 105
125 128 117 128
125 180 117 180
125 221 117 221
125 229 117 229
125 96 117 96
125 105 117 105
125 128 124 128
125 221 124 221
125 30 124 30
125 47 124 47
125 96 124 96
125 105 124 105
但我想要的是:
n.b。一旦给出,团队列表可以达到100。
答案 0 :(得分:3)
HAVING是解决方案
所有球队中存在的球员
select team_id, player_id, count(*) nb from team_players_order
group by player_id
having nb > 1
所有球队中存在的球员
select team_id, player_id, count(*) nb from team_players_order
where team_id in (124, 117)
group by player_id
having nb > 1
答案 1 :(得分:1)
您可以使用“HAVING COUNT”来了解哪个玩家在多个团队中。
SELECT player_id FROM team_players GROUP BY team_id HAVING COUNT(team_id) > 1
列出其他球队中有球员的球队:
SELECT team_id FROM team_players GROUP BY team_id HAVING COUNT(player_id) > 1
希望有所帮助!