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

如何将GROUP_CONCAT聚合结果拆分为独立行而非CSV拼接组?

解决方案:拆分GROUP_CONCAT结果为单独行

你现在的查询用GROUP_CONCAT把符合条件的产品名合并成了一行,但想要拆分成每个产品单独一行并显示对应的ID,其实可以调整查询逻辑,不需要再使用分组和合并函数,直接筛选出符合条件的产品即可。

方法一:使用子查询筛选目标orig_id

先找出所有包含id=6的orig_id,再关联产品表获取对应的产品信息:

SELECT p.id, p.name AS names
FROM cte t
JOIN products p ON p.tag_id = t.id
WHERE t.orig_id IN (
    SELECT orig_id
    FROM cte
    WHERE id = 6
)
ORDER BY p.id;

方法二:使用EXISTS子查询

通过EXISTS判断当前产品所属的orig_id是否存在id=6的记录,逻辑更直观:

SELECT p.id, p.name AS names
FROM products p
JOIN cte t ON p.tag_id = t.id
WHERE EXISTS (
    SELECT 1
    FROM cte t2
    WHERE t2.orig_id = t.orig_id
      AND t2.id = 6
)
ORDER BY p.id;

执行结果

这两个查询都会返回你期望的结果:

+----+-------------------------------------+
| id | names                               |
+----+-------------------------------------+
| 2  | iPhone 14 Promax                    |
| 3  | Samsung Galaxy A55                  |
+----+-------------------------------------+

逻辑说明

原查询的HAVING SUM(t.id = 6) > 0是为了筛选出那些分组(按orig_id)中包含id=6的记录,上面两种方法都是先定位到这些符合条件的orig_id,再关联产品表取出每个产品的单独数据,自然就不需要合并成一行了。

内容的提问来源于stack exchange,提问作者Martin AJ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 12:28:12