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

MySQL使用JOIN、GROUP_CONCAT和FIND_IN_SET关联查询问题求助

正确SQL写法及说明

核心查询语句

SELECT
    t1.id,
    t1.orderid,
    GROUP_CONCAT(t2.name SEPARATOR ', ') AS item_names
FROM
    t1
LEFT JOIN
    t2 ON FIND_IN_SET(t2.id, t1.items) > 0
GROUP BY
    t1.id, t1.orderid;

关键说明

  • 使用LEFT JOIN保证所有订单(包括无匹配商品、items字段为空的订单)都能被查询出来
  • GROUP_CONCAT用于拼接匹配到的商品名称,SEPARATOR可根据需求调整分隔符(默认是逗号)
  • GROUP BY必须包含t1中所有非聚合字段,避免因SQL模式(如ONLY_FULL_GROUP_BY)导致报错

性能优化建议(针对5.8万条订单数据)

  • 优先重构表结构:将t1中逗号分隔的items字段拆分为独立的关联表(如t_order_items,包含orderid和item_id),这是关系型数据库的规范设计,能彻底解决FIND_IN_SET带来的性能瓶颈
  • 若无法修改表结构,可为t2的id字段添加索引,提升匹配效率
  • 若商品名称拼接后长度超出默认限制,可临时调整会话参数:SET SESSION group_concat_max_len = 10240;(数值按需设置)

内容的提问来源于stack exchange,提问作者mohamed elghamry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:32:39