You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从关联表中获取正确信息?需查询员工姓名及其直属经理列表

获取员工姓名及直属经理列表的实现方案

嘿,我来帮你搞定这个需求!要拿到所有员工的姓名和他们的直属经理,核心是利用自连接(毕竟经理本身也是员工表中的一员),再结合部门与员工的关联关系。让我一步步拆解给你看:

理清表关联逻辑

先明确各表之间的关联点,避免写SQL时绕晕:

  • EMPLOYEE表:存储所有员工(包括经理)的核心信息,emp_nbr是员工唯一编号,emp_name是姓名字段。
  • DEPT表:dept_nbr是部门编号,dept_mgr字段存的是该部门经理的emp_nbr——这是我们找到经理的关键。
  • emp_dept表:员工与部门的中间关联表,通过emp_nbr和dept_nbr把员工和他所属的部门绑定在一起。

编写SQL查询

这里需要做三次关联,同时用左连接保证所有员工都能被查询到(哪怕有些员工没有部门或者没有直属经理)。直接上代码:

SELECT
    e.emp_name AS 员工姓名,
    m.emp_name AS 直属经理姓名
FROM
    EMPLOYEE e
LEFT JOIN emp_dept ed ON e.emp_nbr = ed.emp_nbr
LEFT JOIN DEPT d ON ed.dept_nbr = d.dept_nbr
LEFT JOIN EMPLOYEE m ON d.dept_mgr = m.emp_nbr
ORDER BY
    e.emp_name;

代码解释

  • 用e作为员工表的别名,m作为经理表的别名(因为是同一张表自连接,别名区分更清晰)。
  • 第一个LEFT JOIN:把员工和他所属的部门关联起来,拿到员工对应的部门编号。
  • 第二个LEFT JOIN:通过部门编号找到该部门的经理编号dept_mgr。
  • 第三个LEFT JOIN:用经理编号去员工表里匹配对应的经理姓名。
  • 选择LEFT JOIN而非INNER JOIN,是为了避免漏掉那些没有部门(比如公司创始人)或者没有直属经理的员工。

特殊场景处理

如果存在一个员工属于多个部门的情况,查询结果里会出现多条重复的员工记录。这时可以用DISTINCT来去重,或者根据业务规则筛选出员工的主部门:

SELECT DISTINCT
    e.emp_name AS 员工姓名,
    m.emp_name AS 直属经理姓名
FROM
    EMPLOYEE e
LEFT JOIN emp_dept ed ON e.emp_nbr = ed.emp_nbr
LEFT JOIN DEPT d ON ed.dept_nbr = d.dept_nbr
LEFT JOIN EMPLOYEE m ON d.dept_mgr = m.emp_nbr
ORDER BY
    e.emp_name;

内容的提问来源于stack exchange,提问作者Kendall O'Connor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:11:46