【问题标题】:Group Concat Returns Duplicate Entries when applied on multiple columns应用于多列时,Group Concat 返回重复的条目
【发布时间】:2013-08-21 07:58:22
【问题描述】:

我有一个类似于Getting data from multiple tables into single row while concatenating some values 的问题,但我无法理解它,我是一个新手,是 sql 查询。我的表很少,我必须加入它们并连续获取一些连接数据。说明如下:

表 1 - 任务(id,title,user_id) id 标题 user_id tree_id -- ----- -------- -------- 1 个测试任务 1 20 表 2 - task_follower(id,user_id,task_id) id user_id task_id -- ------ -------- 1 1 1 表 3 - account_user(id,name,email) 身份证 姓名 电子邮件 -- ---- ----- 1 rakesh kumar3180@gmail.com 表 2 - 类别(id,类别) 标识类别 -- ------ 1 项目1 表 2 - task_category(id,user_id,task_id) id task_id category_id -- ------ -------- 1 1 1

我运行的查询是:

SELECT a.*, GROUP_CONCAT(b.name SEPARATOR ',') AS member_names, GROUP_CONCAT(b.email SEPARATOR ',') AS member_emails, GROUP_CONCAT(DISTINCT d.category) SEPARATOR ',') AS categories FROM 作为 INNER 任务JOIN task_followers AS c ON a.id = c.task_id INNER JOIN account_user AS b ON c.user_id = b.id INNER JOIN task_category AS i ON a.id = i.task_id INNER JOIN category AS d ON i.category_id = d. id WHERE a.id = 1 AND a.user_id = 1 AND GROUP BY a.id

作为这个查询的结果,我得到:

id 标题 user_id tree_id member_names member_emails --- ----- ------- -------- ------------- ------------- 1 个测试任务 1 20 rakesh,rakesh kumar3180@gmail.com,kumar3180@gmail.com

我无法理解为什么姓名和电子邮件重复?请帮我解决这个问题,如果你能解释一下我在概念上哪里出错了?

我注意到当与任务关联的类别数量超过一个时,就会出现此问题。请看http://sqlfiddle.com/#!2/b96eb/1 我在那里创建了一个示例来演示我的问题。

【问题讨论】:

    标签: mysql join group-concat


    【解决方案1】:

    您可以使用 DISTINCT 删除重复项

    GROUP_CONCAT(DISTINCT b.name SEPARATOR ',')
    

    有重复值的原因是因为碰巧一个表中的一条记录在另一个表上有多个匹配项。 see here.

    【讨论】:

    • 我明白了你的意思,但这里有一个问题。假设两个用户的名字相同,那么它不会显示两个用户。我已经编辑了示例See Here
    • 长话短说,你能根据上面的记录显示你想要的结果吗?
    • 基本上结果与小提琴输出相同,除了这些重复的名称和电子邮件......我想要所有任务,相关的关注者(逗号分隔)和类别(逗号分隔)......
    猜你喜欢
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多