数据库:MySQL
表:团队
TeamID INT
TeamName VARCHAR(20)
表:人员
PeopleID INT
FirstNameID INT
LastNameID INT
表格:团队成员
TeamID INT
PeopleID INT
表示例:团队
TeamID TeamName
1 Team Xstream
2 Team INsanity
表示例:人员
PeopleID FirstNameID LastNameID
1 1351 453
2 5463 763
3 976 8762
4 87 784
5 187 465
6 761 566
7 376 2134
表示例:团队成员
TeamID PeopleID
1 1
1 3
1 7
2 2
2 4
2 5
2 6
所需输出:
TeamName TeamMembers
Team Xstream John Smith/Jane Doe/Daniel Davis
Team INsanity Sally Sue/Tom Thomas/Jack Jones/Harry Henderson
每个团队不会有固定数量的团队成员,因此我不可能有三个子查询,因为只有三个团队成员。我在网上稍微浏览了一下,但我总是在这里得到最好、最彻底的答案。有任何想法或指示,请告诉我。老实说,我不知道从哪里开始。谢谢。
最佳答案
考虑到您只是将 ID 号显示为姓名,我猜测这些人的姓名实际上存储在某个地方。但您需要同时使用 CONCAT()
和 GROUP_CONCAT()
对于这个结果。第一步,将连接所有表并使用 CONCAT()
函数:
select t.teamname,
concat(p.FirstNameId, ' ', p.LastNameId) teamMembers
from teams t
left join teammembers m
on t.teamid = m.teamid
left join people p
on m.peopleid = p.peopleid;
参见SQL Fiddle with Demo ,这将产生结果:
| TEAMNAME | TEAMMEMBERS |
-------------------------------
| Team Xstream | 1351 453 |
| Team Xstream | 976 8762 |
| Team Xstream | 376 2134 |
| Team INsanity | 5463 763 |
| Team INsanity | 87 784 |
| Team INsanity | 187 465 |
| Team INsanity | 761 566 |
获得数据后,应用 GROUP_CONCAT()
函数和 GROUP BY
团队名称:
select t.teamname,
group_concat(concat(p.FirstNameId, ' ', p.LastNameId) SEPARATOR '/') teamMembers
from teams t
left join teammembers m
on t.teamid = m.teamid
left join people p
on m.peopleid = p.peopleid
group by t.teamname;
结果:
| TEAMNAME | TEAMMEMBERS |
---------------------------------------------------
| Team INsanity | 761 566/87 784/187 465/5463 763 |
| Team Xstream | 976 8762/376 2134/1351 453 |
关于MySQL:将多个行值合并到单列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13260046/