MySQL:将多个行值合并到单列中?

标签 mysql

数据库: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;

参见SQL Fiddle with Demo

结果:

|      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/

相关文章:

mysql - 根据另一个表的条件更新表,包括函数

php - mysql如何进行ORDER BY?

PHPMyAdmin 文件上传超时使 MYSQL 密码无效并失去访问权限(使用 XAMPP)

php - 使用 PHP 表单将复选框信息传送到 MySQL 数据库

sql - mysql group by date with multiple join

mysql - symfony2 : An exception occured in driver: SQLSTATE[HY000] [1049] 中的 MySQL (PDO) 错误

MySQL SUM() 运算

mysql - 有人可以解释为什么当我只期望 1 条记录时,这个查询有时会返回零行,而有时会返回多行

mysql - 仅当行存在时通过 MySQLdb 使用 Python 更新列

php - 表单操作不允许删除记录