问题
有部门表和部门管理员表,部门表比较常规,反常的是部门管理员表。这张表是ETL整理出来的表,包含各部门的主管、秘书、机要员信息等等。
下面把关键字段列出来:
部门表,department:
| dept_code | dept_name |
|---|---|
| 50040001 | 部门1 |
| 50040002 | 部门2 |
| 50040003 | 部门3 |
部门管理员表,manager:
| dept_code | emp_code | type_id | seq_id |
|---|---|---|---|
| 50040002 | 03328 | 1 | 1 |
| 50040002 | 06667 | 1 | 2 |
| 50040002 | 11053 | 2 | 1 |
| 50040003 | 15075 | 1 | 1 |
type_id表示这个人的角色,type_id=1则为部门主管,type_id=2则为部门秘书,还有其它的可能不列举了。
seq_id表示顺序,因为有的部门会有多个主管和多个秘书,需要给他们一个顺序。同时,有的部门什么都没有,如部门1,在manager表里根本没有记录。
我们的目标是,关联出每个部门的主管信息,没有的话(确实有没有主管的部门)为空,多个的话取第1个。输出类似下面的结构:
| dept_code | dept_name | emp_code |
|---|---|---|
| 50040001 | 部门1 | null |
| 50040002 | 部门2 | 01381 |
| 50040003 | 部门3 | 15075 |
我能写的SQL如下,简直是裹脚布啊,不知道怎么优化:
SELECT
d.dept_code,
d.dept_name,
m.emp_code
FROM
department as d
LEFT JOIN (
SELECT
type_id,
dept_code,
emp_code
FROM
hrs.manager
WHERE
type_id = 1
AND seq_id = 1) AS m ON
d.dept_code = m.dept_code
针对部门表和部门管理员表的数据结构,本文探讨如何通过SQL优化查询每个部门的主管信息,即使面对空缺或多个主管的情况,也能准确快速地获取首个主管的详细资料。

被折叠的 条评论
为什么被折叠?



