4

我还在学习 SQL,但我的大脑很难处理这个问题。

假设我有 3 张桌子:

teams
players

teams_players作为我的链接表

我想做的就是运行一个查询来获取每支球队和他们的球员。

我试过这个:

SELECT * 
FROM teams 
INNER JOIN teams_players 
    ON teams.id = teams_players.team_id 
INNER JOIN players 
    ON teams_players.player_id = players.id

但它为每支球队的每个球员返回了一个单独的行。加入是正确的方法还是我应该做其他事情?

- - - - - - - - - - - - - - - - - - - - - 编辑

好的,所以据我所知,这不一定是一个坏方法。我只需要在循环时按团队对数据进行分组。

我还没有尝试过提供的修改后的 SQL 语句,但我会在今天回复您。

要回答有关结构的问题 - 我想我并没有考虑返回的行结构,这是导致我困惑的一部分。在这种特殊情况下,每支球队仅限于 4 名球员(或更少),所以我想对我有帮助的结构如下所示:

teams.id, teams.name, players.id, players.name, players.id, players.name, players.id, players.name, players.id, players.name,
1         Team ABC    1           Jim           2           Bob           3            Ned          4             Roy
2         Team XYZ    2           Bob           3           Ned           5            Ralph        6             Tom
4

2 回答 2

3

好的,这是一个猜测,但你想要一个团队,并且团队中的球员名单在一行

怎么样

SELECT t.id, GROUP_CONCAT(p.id)
FROM teams t
INNER JOIN teams_players tp
    ON t.id = tp.team_id 
INNER JOIN players p
    ON tp.player_id = p.id
GROUP BY t.id

手册可能会有所帮助http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html#function_group-concat

于 2012-09-02T01:46:23.160 回答
1

MySQL 将以表格格式返回数据,因此请考虑如何在一个表格/结果集中返回球员和球队的列表,包括每个球员与哪个球队相关联,而不为球队中的每个球员返回单独的行?

您的查询应返回:

team.id, team.name, player.id, player.name
1        team1      1          player1
1        team1      2          player2
2        team2      3          player3
2        team2      4          player4

如果你想要类似的东西

team.id, team.name
1        team1
2        team2

player.id, player.name, team.id
1          player1      1
2          player2      1
3          player3      2
4          player4      2

其中有两个单独的结果集,那么您必须进行两个查询。如果您想为每个团队提供不同的结果集,则必须为每个团队进行额外的查询。

话虽如此,我认为您的初始查询并没有什么太大的问题,只是它为您提供了大量重复数据以换取不必进行多个查询。

于 2012-09-02T01:43:23.600 回答