Mysql在两个表中查找公共字段的匹配行,并将字段组合成一行

时间:2016-04-19 21:27:53

标签: 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 med”游泳“1-2-16快速游泳”。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

你应该使用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;