Mysql 在两个表中找到公共(public)字段的匹配行并将字段合并为一行

标签 mysql group-by

我有三张表: 表“A”有许多事件,每个事件都有一个唯一的 ID。 表“B”具有与表 A 的 id 相匹配的类别,尽管每个 id 可能有多个匹配项。 表“C”定义了与表“B”中的 ID 匹配的类别名称。 如何获得显示具有一起列出的多个类别的唯一事件的输出,而不是每个类别重复的每个事件?

       Table A                  Table B              Table C
id | event | date |          id | catid             catid | cat
1     swim   1-2-16           1     11                11    slow
2     swim   1-2-16           1     12                12    med
3     run    1-3-16           1     13                13    fast
4     bike   1-5-16           2     11
5     run    1-30-16          3     12
                              3     13
                              4     12
                              5     11 

我有这个Mysql语句:

    SELECT A.*, B.*, C.*
         FROM A, B, C
         WHERE A.id = B.id and B.catid = C.catid and DATE(date) BETWEEN "1-2-16" and "1-5-16
ORDER BY event, cat 

问题是此语句的输出对每个类别重复该事件。我希望输出将适用于每个事件的所有类别列为输出行。例如,“在 1-2-16 慢速、中速、快速上游泳”而不是“在 1-2-16 慢速上游泳”“在 1-2-16 中速游泳”“在 1-2-16 快速游泳”。我怎样才能做到这一点?

最佳答案

你应该使用group_concat

 select A.event, A,date, group_concat(C.cat)
 from A
 inner join b on a.id = b.id
 inner join b.catid = c.catid
 group by b.id;

关于Mysql 在两个表中找到公共(public)字段的匹配行并将字段合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36729807/

相关文章:

python - 对列表中相同元素的索引进行分组的有效方法

mysql - 如何在 Stata 中按语句(来自 MySQL)进行分组?

mysql - 将 "on duplicate key"与多个重复条件一起使用

javascript - 在表前添加新的表单行并在行之间添加 "enter"

python - 减去 Pandas 数据框

mysql - INSERT FROM SELECT UPDATE ON DUPLICATES UPDATE = count(*)

python - pandas,按函数分组后的列名称

php - MySQL 表中的斜线,但使用 PDO 和参数化查询。这是怎么回事?

php - 使用 PDO 插入记录后获取 mysql 最后插入 ID

backup - 更新行时 mysql 转储停止