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

MySQL与MariaDB中GROUP_CONCAT结果去重技术问询

解决GROUP_CONCAT输出重复值的问题

这问题我日常写SQL时碰到过好多次,核心原因是JOIN操作导致返回的结果行出现重复,GROUP_CONCAT会把这些重复行里的nazwa值都拼进去,自然就出现了多余的重复内容。给你几个实用的解决思路:

1. 直接在GROUP_CONCAT中使用DISTINCT去重

这是最快捷的办法,只需要在GROUP_CONCAT里加上DISTINCT关键字,让它自动忽略重复的nazwa值:

SELECT GROUP_CONCAT(DISTINCT mr.nazwa SEPARATOR ', ') 
FROM mp06_logos.milkruny AS mr 
JOIN mp06_logos.milkruny_firmy AS mrf ON mrf.id_milkrun = mr.id 
WHERE mr.status = 1 AND mrf.id_firmy_zaladunku = 5445 AND mrf.adres_firmy_zaladunku = 5188 ...

这个方案代码改动最小,适合快速解决问题。

2. 先去重再关联,减少重复行

如果两张表关联后产生的重复行特别多,先通过子查询把milkruny表中需要的记录去重,再和milkruny_firmy关联,能提升查询性能:

SELECT GROUP_CONCAT(mr.nazwa SEPARATOR ', ') 
FROM (
    SELECT DISTINCT id, nazwa 
    FROM mp06_logos.milkruny 
    WHERE status = 1
) AS mr 
JOIN mp06_logos.milkruny_firmy AS mrf ON mrf.id_milkrun = mr.id 
WHERE mrf.id_firmy_zaladunku = 5445 AND mrf.adres_firmy_zaladunku = 5188 ...

这样先过滤掉milkruny里的重复项,再做JOIN,从源头上减少了重复行的产生。

3. 检查JOIN条件是否足够严谨

有时候重复是因为关联条件太宽松,导致一条milkruny记录对应多条milkruny_firmy记录。你可以确认下id_milkrun是不是唯一的关联键,或者有没有其他字段可以加到JOIN条件里,比如如果milkruny_firmy里还有和milkruny对应的其他标识,把这些也加上,能避免不必要的关联重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:24:49