You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询:将子表数据合并为主表单列

MySQL 查询:合并订单明细中的箱号为逗号分隔字符串

原查询存在的问题:

  • 表别名使用混乱:给order_details起了别名sub_table,但后续引用仍用原表名,逻辑不一致
  • GROUP BY不符合SQL规范:SELECT了orders.*但仅按order_details.order_id分组,在MySQL严格模式下会触发报错或返回异常结果
  • 未兼容无明细的订单:INNER JOIN会过滤掉没有对应明细的订单,无法保证所有订单都出现在结果中

修正后的查询语句:

SELECT 
    orders.id AS `id(来自orders表)`,
    orders.name,
    GROUP_CONCAT(order_details.box_number ORDER BY order_details.id SEPARATOR ',') AS box_numbers
FROM orders
LEFT JOIN order_details ON orders.id = order_details.order_id
GROUP BY orders.id, orders.name;

关键说明:

  • 使用LEFT JOIN替代INNER JOIN,确保所有订单(即使无对应明细)都能被查询到,无明细时box_numbers返回NULL
  • GROUP BY指定orders.id和orders.name,符合SQL标准,避免严格模式下的语法错误
  • 为orders.id设置别名匹配你需要的结果字段名
  • 调整GROUP_CONCAT的分隔符为无空格的',',和目标输出格式一致
  • 保留ORDER BY order_details.id保证箱号拼接顺序与明细记录的ID顺序一致

内容的提问来源于stack exchange,提问作者kaywan bayazidy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:44:56