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
相关产品推荐
相关产品推荐

