关于mysql:My Sql Group Concat Returns Duplicate Rows | 珊瑚贝

My Sql Group Concat Returns Duplicate Rows


我有一个类似于在连接一些值时从多个表中获取数据到单行的问题,但我无法理解它,我是一个新手,是 sql 查询。我的表很少,我必须加入它们并连续获取一些连接数据。说明如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Table 1 tasks(id,title,user_id)
id     title          user_id     tree_id
—     —–          ——-     ——-
1      test task         1          20

Table 2 task_follower(id,user_id,task_id)
id     user_id   task_id
—     ——-   ——-
1        1          1

Table 3 account_user(id,name,email)
id      name    email
—      —-    —–
1       rakesh  kumar3180@gmail.com

Table 2 category(id,category)
id     category
—     ——-
1        Project1

Table 2 task_category(id,user_id,task_id)
id     task_id   category_id
—     ——-   ——-
1        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 tasks AS a 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

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

1
2
3
id    title       user_id   tree_id     member_names    member_emails
—   —–       ——-   ——-     ————-   ————-
1     test task      1        20        rakesh,rakesh   kumar3180@gmail.com,kumar3180@gmail.com

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

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


您可以像这样在 GROUP_CONCAT 中使用 DISTINCT:

1
GROUP_CONCAT(DISTINCT b.email SEPARATOR ‘,’) AS member_emails
  • 但这对于名称是不可能的..因为名称不能是唯一的..实际上我必须显示逗号分隔的名称,如果名称不可用,则电子邮件..有可能吗?
  • @user2645698 name is not unique 许多可以有相同的 name 。并且在您的代码中,您将其复制了,您应该按照 mahmoud 告诉您的方式使用 distinct
  • @user2645698 – 抱歉,我无法理解您,您能否发布一些额外的示例数据来解释该问题,您也可以更新此演示以显示此问题。
  • 我明白你的意思.. 好吧,让我这样说:假设有两个用户 User1<user1@example.com> 和 User1<user2@example.com> 现在如果我邀请他们两个,然后使用显示他们的名字DISTINCT,它将无法正常工作。所以我也必须解决这个问题。
  • @user2645698 – 你的意思是用户可以有多个电子邮件?你只需要选择一封电子邮件?您能否使用完整的示例数据更新您的问题,并使用所需的输出解释此问题?这将非常有帮助。谢谢。
  • @user2645698 – 添加 DISTINCT 查看此更新的演示


来源:https://www.codenong.com/18016734/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9091.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?