【问题标题】:Concatenate fields of rows with the same ID in MySQL在 MySQL 中连接具有相同 ID 的行的字段
【发布时间】:2015-03-11 12:01:52
【问题描述】:

我有以下疑问:

SELECT mutations.id, genes.loc FROM mutations, genes where mutations.id=genes.id;

并输出:

| SL2.50ch02_51014904 | intergenic    |
| SL2.50ch02_51014907 | upstream      |
| SL2.50ch02_51014907 | downstream    |
| SL2.50ch02_51014907 | intergenic    |
| SL2.50ch02_51014911 | upstream      |
| SL2.50ch02_51014911 | downstream    |

我想要的输出是这样的:

| SL2.50ch02_51014904 | intergenic    |
| SL2.50ch02_51014907 | upstream,downstream,intergenic      |
| SL2.50ch02_51014911 | upstream,downstream      |

我认为GROUP_CONCAT 对此很有用。但是,这样做:

SELECT mutations.id, GROUP_CONCAT(distinct(genes.loc)) FROM mutations, genes WHERE mutations.id=genes.id;

我有这样一个独特的行:

SL2.50ch02_51014904 | downstream,intergenic,upstream

我该如何解决这个问题?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您需要添加group by:

    SELECT m.id, GROUP_CONCAT(distinct(g.loc)) 
    FROM mutations m JOIN
        genes g
        ON m.id = g.id
    GROUP BY m.id;
    

    在此过程中,您应该学习其他一些东西:

    • 使用显式join 语法。一条简单的规则:永远不要在 from 子句中使用逗号。
    • 使用表别名(mg)。它们使查询更易于编写和阅读。

    【讨论】:

    • 加入和别名使用
    【解决方案2】:

    你忘了GROUP BY

    SELECT 
      mutations.id, 
      GROUP_CONCAT(DISTINCT(genes.loc)) 
    FROM 
      mutations, genes 
    WHERE 
      mutations.id=genes.id
    GROUP BY
      mutations.id
    

    【讨论】:

      猜你喜欢
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 2022-12-14
      • 2018-12-26
      • 2012-08-07
      • 2016-10-02
      • 1970-01-01
      相关资源
      最近更新 更多