在MySQL中连接具有相同ID的行的字段

时间:2015-03-11 12:01:53

标签: mysql sql

我有以下查询:

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:7)

您需要添加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)。它们使查询更容易编写和阅读。

答案 1 :(得分:3)

您忘记了GROUP BY

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