我还在学习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
答案 0 :(得分: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
答案 1 :(得分: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
其中有两个单独的结果集,那么您将不得不进行两次查询。如果您想为每个团队设置不同的结果集,则必须为每个团队进行额外的查询。
话虽如此,我没有看到你的初始查询有太多错误,只是它为你提供了大量重复数据,以换取不必多次查询。