加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2021-01-17 01:55:07 所属栏目:编程 来源:网络整理
导读:因此,让我先说一下,我不是一个SQL向导.我想要做的是作为一个概念简单,但在尝试最小化我正在执行的数据库查询量时给了我一个小挑战. 假设我有一个部门表.每个部门都有一份员工清单. 列出所有部门以及每个部门中哪些员工的最有效方式是什么. 例如,如果我有一个

因此,让我先说一下,我不是一个SQL向导.我想要做的是作为一个概念简单,但在尝试最小化我正在执行的数据库查询量时给了我一个小挑战.

假设我有一个部门表.每个部门都有一份员工清单.

列出所有部门以及每个部门中哪些员工的最有效方式是什么.

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

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

列出所有部门和每个部门所有员工的最佳方式是:

销售

>汤姆
>比尔
>瑞秋

营销

>杰西卡
>约翰

假装两张桌子实际上是庞大的. (我想避免获取部门列表,然后循环结果并为每个部门执行单独查询).当状态和注释存储在单独的表中时,类似地考虑在类似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

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读