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

Group 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

可以使用distinct删除重复项

GROUP_CONCAT(DISTINCT b.name SEPARATOR ',')
  • SQLFiddle演示

具有重复值的原因是,一个表中的一条记录在另一个表中有多个匹配项。看这里。

 类似资料:
  • 问题内容: 根据成员的建议和以前的帖子,我正在对Interspire购物车数据库中的多个表进行查询,如下所示: 我在phpmyadmin中得到的结果如下所示: 当我尝试在php页面中回显结果以对其进行测试时,什么也没有返回。我只是想知道Blob的含义以及如何使用它。显然其中有一些数据,我只是不知道如何访问或使用它。 问题答案: 在phpmyadmin上方显示的值中,您可以看到+ Options按钮

  • 问题内容: 我正忙于一段代码来从Oracle数据库获取表的列名。我想出的代码如下所示: 当我运行此代码时,令我惊讶的是,返回了太多列。仔细研究发现,ResultSet包含所有列的重复集,即每个列都返回了两次。这是我得到的输出: 当我使用Oracle SQL Developer查看该表时,它显示该表只有三列(ID,NAME,CITY)。我已经针对数据库中的几个不同表尝试了此代码,其中一些工作很好,而

  • 我是SpringBoot的新手,正在寻找一种在endpoint超过3秒才能返回响应时超时的方法。我尝试添加属性“server.servlet.session.timeout”,但仍然没有运气。如何做到这一点?谢谢。 Application.properties

  • 我在Java中有一个与MySQL连接的多类项目,我可以与这个SQL数据库建立连接,但当我试图将它读入数组时,它得到的是废话,而不是所请求的信息。我做错了什么? 它在sql定义下面出现了一条弯曲的线条,说它们从来没有被读取过,但我就是不明白为什么会这样!它构建得很好,可以看到数据库中有行,但它返回以下内容: 显示“java2assignment3.dvd@5e0010bc”和“java2assign

  • 在Java 8中,我越来越多地用替换返回值。 所以我曾经有: 我现在使用: 我对此的论点是: 它强制执行基础列表的不变性。 它隐藏了存在基础列表的事实。之后可以将其更改为集合或其他结构,而无需更改方法签名 它很好地封装了该方法的用户希望对项进行处理,而不是对列表进行处理 如果需要,它可以在以后进行简单的并行化 事实上,现在,在我的代码中,返回<code>列表 显然,其中一些可以通过不可变集合来实现