2

我刚刚回顾了这个问题,但我需要的是完全不同的东西。

但是,我有这张桌子:

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        

但我想要的是:

  1. 存在于所有捐赠团队中的玩家(通过他们的 ID)
  2. 存在于所有球队中的球员。

注意一旦给出,团队列表可能会达到 100 个。

4

2 回答 2

3

拥有是解决方案

存在于所有球队的球员

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
于 2013-03-29T10:41:46.640 回答
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

希望有帮助!

于 2013-03-29T10:38:02.263 回答