MySQL多表LEFT JOIN查询:获取分组名称拼接结果
解决方案
没问题,这事儿用MySQL的GROUP_CONCAT()函数配合LEFT JOIN就能轻松搞定,刚好匹配你的需求。
最终查询语句
SELECT t1.id, t1.description, GROUP_CONCAT(t3.group_name SEPARATOR ', ') AS group_names FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.id = t2.id LEFT JOIN Table3 t3 ON t2.group_id = t3.group_id GROUP BY t1.id, t1.description ORDER BY t1.id;
代码解释
- LEFT JOIN:确保即使某个id在Table2/Table3里没有对应的分组数据,也能保留Table1里的记录(你的示例数据里所有id都有分组,所以结果和INNER JOIN一致,但LEFT JOIN更通用)。
- GROUP_CONCAT():这是核心函数,它会把同一分组下的
group_name字段值拼接成一个逗号分隔的字符串,SEPARATOR ', '指定分隔符(默认就是逗号,这里写上更明确)。 - GROUP BY:必须按
t1.id和t1.description分组,这样才能把同一个id的所有分组名聚合到一起。 - ORDER BY:让结果按id排序,和你期望的输出顺序一致。
执行结果
运行这条查询后,你会得到和你期望完全一致的结果:
| id | description | group_names |
|---|---|---|
| i1 | description1 | group1, group2 |
| i2 | description2 | group2 |
| i3 | description3 | group1, group3 |
| i4 | description4 | group1 |
内容的提问来源于stack exchange,提问作者WillCome
相关产品推荐
相关产品推荐

