我遇到了一个类似于将多个表中的数据合并到单行中的问题,同时连接一些值,但我不能理解它,而且我是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我在那里创建了一个示例来演示我的问题。
可以使用distinct
删除重复项
GROUP_CONCAT(DISTINCT b.name SEPARATOR ',')
具有重复值的原因是,一个表中的一条记录在另一个表中有多个匹配项。看这里。
问题内容: 根据成员的建议和以前的帖子,我正在对Interspire购物车数据库中的多个表进行查询,如下所示: 我在phpmyadmin中得到的结果如下所示: 当我尝试在php页面中回显结果以对其进行测试时,什么也没有返回。我只是想知道Blob的含义以及如何使用它。显然其中有一些数据,我只是不知道如何访问或使用它。 问题答案: 在phpmyadmin上方显示的值中,您可以看到+ Options按钮
我在Spring学习依赖注入有时
问题内容: 我正忙于一段代码来从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>列表 显然,其中一些可以通过不可变集合来实现