当前位置: 首页 > 知识库问答 >
问题:

我的Sql组Concat返回重复行

轩辕炎彬
2023-03-14

我遇到了一个类似于将多个表中的数据合并到单行中的问题,同时连接一些值,但我不能理解它,而且我是sql查询的新手。我有很少的表,我必须将它们连接起来,并在一行中得到一些串联的数据。说明如下:

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

而我运行的查询是:

    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

这个查询的结果是:

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我在那里创建了一个示例来演示我的问题。

共有1个答案

商和颂
2023-03-14

您可以在group_concat中使用distinct,如下所示:

GROUP_CONCAT(DISTINCT b.email SEPARATOR ',') AS member_emails 
 类似资料:
  • 我试图将三列作为一个字符串,但由于某些原因,我只得到NULL。 以下是代码: places表包含name、city和country三列,它不是空的,但在某些列中可以包含NULL。 结果是: 我试着从这篇帖子中得到答案,如果任何字段包含NULL,MySQL CONCAT将返回NULL,但它对我不起作用。

  • 问题内容: 我有一个查询,返回以下行: StateId,OrderId,OrderTime,PermitId 我只需要返回全盘完全重复的行,因此每条记录必须与另一条记录完全相同,这样它才可以重复。我想退回两个记录。这些记录与一堆没有重复的记录混在一起… 任何的想法? 问题答案: 首先,确定重复项。其次,重新加入以提取这些行。 非聚集(或非窗口/排名)自连接形成部分交叉连接,并为任何一组键给出重复的

  • 我有下面的代码 我的期望是,若map中并没有值(数组),它将返回对新创建的数组的引用,我可以将我的“值”添加到该数组中。 然而,我看到myContext地图是空的。似乎超级基本,我不明白。

  • 我遇到了一个类似于将多个表中的数据合并到单行中的问题,同时连接一些值,但我不能理解它,而且我是sql查询的新手。我有很少的表,我必须将它们连接起来,并在一行中得到一些串联的数据。说明如下: 而我运行的查询是: 这个查询的结果是: 我不明白为什么名字和电子邮件是重复的?请帮我解决这个问题,也请你解释一下我在概念上哪里出了问题? 我注意到,当与任务关联的类别数超过一个时,就会出现这个问题。请查看htt

  • 问题内容: 我正在运行的程序在这里上差异的物理机器2级的JVM。我得到了错误 我什至尝试在同一台机器(未更改的程序)上运行它,但是它可以在diff机器上运行。有人可以帮我吗? @ beny23-谢谢,但我仍然遇到此错误: 客户端如何拥有CalculatorImpl_stub的副本? 问题答案: 听起来您没有使用安全管理器: 您是否有政策文件(): 并使用运行您的程序

  • 问题内容: 我想从数组中检索所有重复的条目。这在PHP中可行吗? 我想返回一个仅包含重复值的数组:“ hello”。 所需的输出数组: 问题答案: 您需要使函数不区分大小写,以获取所需的“ Hello” =>“ hello”结果,请尝试以下方法: 输出为: 通过@AlixAxel编辑: 这个答案很有误导性。它仅在此特定条件下有效。这个反例: 惨败 。另外,这不是保留重复项的方法: 由于重复的值之一