如何编写MySQL查询将多记录的单列数据合并到单个单元格?
如何编写MySQL查询将多记录的单列数据合并到单个单元格?
看起来你需要把关联表中同一个订单下的所有商品ID合并成一个逗号分隔的字符串,这在MySQL里用GROUP_CONCAT()函数就能轻松搞定啦!
你的表结构
orders表
| id | customer |
|---|---|
| 19 | 373 |
| 20 | 358 |
orderlines表
| id | order_id | article_id |
|---|---|---|
| 3 | 19 | 22 |
| 4 | 19 | 28 |
| 5 | 19 | 42 |
| 6 | 20 | 22 |
| 7 | 20 | 69 |
期望结果
| id | customer | articles |
|---|---|---|
| 19 | 373 | 22,28,42 |
| 20 | 358 | 22,69 |
解决方案:使用GROUP_CONCAT()的查询语句
直接用关联查询+分组+GROUP_CONCAT()就能实现,具体SQL如下:
SELECT o.id, o.customer, GROUP_CONCAT(ol.article_id) AS articles FROM orders o JOIN orderlines ol ON o.id = ol.order_id GROUP BY o.id, o.customer;
简单解释一下:
JOIN orderlines ol ON o.id = ol.order_id:把两个表通过订单ID关联,让每个订单对应的所有商品记录都能匹配上GROUP BY o.id, o.customer:按订单ID和客户分组,确保每个订单只返回一行结果GROUP_CONCAT(ol.article_id):把分组后每个订单对应的所有article_id用逗号连接成字符串,逗号是默认分隔符,如果你需要其他分隔符,可以加SEPARATOR '分隔符'来指定,比如GROUP_CONCAT(ol.article_id SEPARATOR ';')
如果你的商品ID可能存在重复,想要去重的话,只需要改成GROUP_CONCAT(DISTINCT ol.article_id)就可以了。
备注:内容来源于stack exchange,提问作者siska.77
相关产品推荐
相关产品推荐

