【问题标题】:Mysql find matching rows for common field in two tables and combine fields into one rowMysql在两个表中查找公共字段的匹配行并将字段合并为一行
【发布时间】:2016-04-20 08:31:12
【问题描述】:

我有三张桌子: 表“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 快速游泳”。我怎样才能做到这一点?

【问题讨论】:

    标签: mysql group-by


    【解决方案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;
    

    【讨论】:

    • 在我的实际应用程序中,我还必须将等效的 MAX(A.id) 添加到 Select 部分。
    猜你喜欢
    • 2015-05-14
    • 2023-03-19
    • 2018-10-20
    • 2010-11-14
    • 2018-03-25
    • 2019-11-29
    • 1970-01-01
    • 2010-11-25
    • 2015-03-29
    相关资源
    最近更新 更多