从具有不同id的同一个表中获取具有共同值的行

时间:2013-03-29 10:27:48

标签: mysql

我刚刚审核了这个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        

但我想要的是:

  1. 所有捐赠队伍中存在的球员(通过他们的ID)
  2. 所有球队中存在的球员。
  3. n.b。一旦给出,团队列表可以达到100。

2 个答案:

答案 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

希望有所帮助!