当前位置: 首页 > 面试题库 >

使用具有一对多关系的联接来最小化SQL查询

饶明亮
2023-03-14
问题内容

因此,让我以任何方式说我都不是SQL向导来作为开头。我想做的是一个简单的概念,但是在尝试最小化我正在执行的html" target="_blank">数据库查询量时给我带来了一个小挑战。

假设我有一个部门表。每个部门内都有一个雇员列表。

列出所有部门以及每个部门中哪些雇员的最有效方法是什么?

因此,例如, 如果我有一个部门表:

id   name
1    sales
2    marketing

和一个人表:

id   department_id   name
1    1               Tom
2    1               Bill
3    2               Jessica
4    1               Rachel
5    2               John

最好的方法是像这样列出所有部门和每个部门的所有员工:

营业额

  • 汤姆
  • 法案
  • 雷切尔

营销学

  • 杰西卡(Jessica)
  • 约翰

假设两个表实际上都是巨大的。(我想避免获得部门列表,然后遍历结果并为每个部门进行单独查询)。当状态和注释存储在单独的表中时,类似于在类似Facebook的系统中选择状态/注释的思考。


问题答案:

您可以通过简单的连接在单个查询中获得所有信息,例如:

SELECT   d.name AS 'department', p.name AS 'name'
FROM     department d
  LEFT JOIN people p ON p.department_id = d.id
ORDER BY department

这将返回所有数据,但是使用起来有些麻烦,因为无论如何您都必须遍历每个人。您可以进一步将它们分组在一起:

SELECT   d.name AS 'department',
         GROUP_CONCAT(p.name SEPARATOR ', ') AS 'name'
FROM     department d
  LEFT JOIN people p ON p.department_id = d.id
GROUP BY department

您将获得如下内容:

department | name
-----------|----------------
sales      | Tom, Bill, Rachel
marketing  | Jessica, John


 类似资料:
  • 我正在使用Play Framework 2.1.0和Ebean,在查询下列场景时遇到问题: 我有3类表示数据库中的表。 使用Ebean,如何 > 是否检索项目列表中的所有子项目? 是否检索项目的所有小型项目? 给定子项目列表,如何检索所有小项目?

  • 问题内容: 我有桌子。与… 有关系。 类作者 课堂书 如何编写查询,以便能获得所有作者和那里的书,而且书名应以 我知道使用这样的查询, 我可以获取所有作者和那里的书,但是如何在书上注明条件? 问题答案: 我认为是这样的: 虽然不确定a.Book,也可能是a.Books,因为您的列名就是这样命名的。

  • 我有一个桌子实验和一个桌子标签。一个实验可能有许多标签。架构: 是否可以使用返回实验和相应标签列表的jooq创建查询? 类似

  • 问题内容: 我有一个使用联接表建模的一对多关系: 这些表应该模拟一个t1与多个t2的关系。使用JPA为这些表建模的正确方法是什么? 问题答案: 一个T1到多个T2的典型表是在T2上有一个指向T1的外键。通常不需要T1_T2表。 这样,JPA结构将是一对多的,可能是双向的。 可能会有一些安排,以使您描述的结构起作用。您可以更改T1_T2: 在T2上添加唯一约束(以便仅允许一个T2) 那真的是你想要的

  • 问题内容: 我有以下查询。它工作正常,但我需要从另一个名为FB的表中提取BUserName,该表具有与FU表中的UserID相关的UserID字段。这可能吗? 只是为了澄清。我在FB表中没有UserName列。它确实有FB.UserID,它与FF.UserID有关系,这是我要从中提取第二个UserName的地方。因此,通过这种关系,我试图从与FB表中的userID相关的FF.UserID表中拉出用

  • 问题内容: 我有两个表A和Band,A与B之间的关系是A —>一对多—> B 通常,对于A的每条记录,我都有一个B的记录。 我正在尝试编写一个查询,该查询将为我提供A的 唯一 记录列表,其中B中的 记录 超过 一个(多个) 。 我很困惑,因为我只完成了基本的sql查询,而这对我来说似乎很复杂。 可以请一个人指导我正确答案或给我解决方案。 编辑: 好吧,我尝试了下面的事情,它给了我一个错误 从A a