当前位置: 首页 > 面试题库 >

在MySQL中串联具有相同ID的行的字段

尚恩
2023-03-14
问题内容

我有以下查询:

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

我该如何解决?


问题答案:

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


 类似资料:
  • 问题内容: 很抱歉,我只学习了PHP和MySQL,已经搜索了一个多星期,但是没有找到任何答案。 我创建了一个简单的财务脚本,该表如下所示: 我想要这样的结果 有人可以帮助我解决我的问题吗? 谢谢 问题答案: 正如@Quassnoi指出的那样,这对于MySQL来说不是很有效。我尝试使用怪胎连接而不是子查询,因为内部查询本身就可以使用。 编辑 对此引起了一些兴趣,发现连接版本的速度是@Quassnoi

  • 我正在尝试用mysql编写一个查询,其中我的表结构如下所示 这里我有美国的id,它是1,使用这个id我想检索美国的所有州和每个州的城市。这里, 如果state_id和city_id为0,则为国家 如果city_id为0,则为状态 如果state_id为0,则为城市 位置id为auto_increment 请有人帮帮我,谢谢。

  • 我有四个表 我想获得所有付款金额和现金预付款金额的总和,这些金额与从特定日期起与某人加入的贷款具有相同的ID。 这是我的代码,但总和计算不正确:

  • 问题内容: 我遇到一个问题,当执行两个表的联接时,无法确定mysql查找具有两个特定“标签”和相同“ hashid”的链接 假设我的表看起来像这样: 链接 标签 我想返回同时具有“有用”和“很棒”标签的行 当前(工作/快速)查询,用于按1个标签查找链接: 阅读文章后,我尝试使用以下内容: 这 不 工作,但它是如此令人难以置信的缓慢,因为无法使用。 有人知道解决方案吗? 问题答案: 问题的类型称为

  • 问题内容: 我有一个table(),其中2个column(和)是id。这些对应名称的名称在带有列的另一个表()中。 假设我只是在使用,那么简单的内部联接就可以解决我在获取名称时遇到的问题。 如 但是,如果我希望该名称也要解析为什么?“内部连接”会将其解析为? 我知道以上查询是错误的。我可以得到那些对应于两个第和用? -初学者 问题答案: 我建议始终为表和列添加别名。因此,您将确定选择了哪些数据。

  • 问题内容: 让我们考虑下表- 我是一个SQL新手,但是如何返回同时包含ID 2和ID 4的分数?因此,由于ID 2和ID 4中均包含该字符,因此应该返回100 问题答案: 这是“组内集”查询的示例。我建议使用该子句进行聚合,因为这是最灵活的方法。 这是在按分数汇总。然后,子句()的第一部分是计算每个分数有多少个“ 2”。第二个是计算多少个“ 4”。仅返回分数为“ 2”和“ 4”的分数。