【问题标题】:How to write a SQL query to find first name of all the employees and their department's manager?如何编写 SQL 查询来查找所有员工及其部门经理的名字?
【发布时间】:2023-01-16 18:14:52
【问题描述】:

这是我需要加入的两个表。具体来说,我需要找到的是所有员工的名字和他们部门经理的名字。我只是不确定查询将如何进行。

以下是有关上述两个表的一些详细信息:

  1. 员工.DEPID = 部门.DID
  2. Departments.MGRID = 显示该部门经理的 Employees.EID。

    这是我得到预期结果的最接近的查询(但不完全是)-

    询问 -

    select
      EMPLOYEES.FNAME, DEPARTMENTS.D_NAME, DEPARTMENTS.MGRID
    from EMPLOYEES
      left join DEPARTMENTS
      on EMPLOYEES.DEPID = DEPARTMENTS.DID;
    

    结果 -

    FNAME                D_NAME          MGRID
    -------------------- --------------- -----
    SHAHID               Accounts
    PREM                 Accounts
    AKASH                Accounts
    SHAAN                IT
    VISHAL               IT
    DEV                  Management
    SOME                 Design
    MANISHA              Design
    ISHAAN               Web             E-01
    ADITI                Web             E-01
    KAVITA               Web             E-01
    

    现在,我需要将此 MGRID 更改为经理的名字。

【问题讨论】:

  • MySQL 和 Oracle 是两个不同的 RDBMS;你用的是哪一个?

标签: sql oracle oracle10g


【解决方案1】:

LEFT JOIN employees 表第二次(并给它一个不同的别名)关联部门的经理 ID 和经理的员工 ID,然后从员工表的第二个实例中获取经理的姓名。

SELECT e.FNAME,
       d.D_NAME,
       m.FNAME AS manager_name
FROM   employees e
       LEFT OUTER JOIN departments d
       ON e.DEPID = d.DID
       LEFT OUTER JOIN employees m
       ON d.mgrid = e.eid;

【讨论】:

    【解决方案2】:

    一种选择是使用自连接(即使用 employee 表两次 - 一次用于员工,另一次用于经理)。是这样的:

    样本数据:

    SQL> with
      2  employees (eid, fname, depid, designation) as
      3    (select 'E-01', 'KAVITA', 'D-01', 'MANAGER'  from dual union all
      4     select 'E-02', 'ADITI' , 'D-01', 'EMPLOYEE' from dual union all
      5     select 'E-07', 'ISHAAN', 'D-01', 'EMPLOYEE' from dual
      6    ),
      7  departments (did, d_name, mgrid) as
      8    (select 'D-01', 'Web', 'E-01' from dual)
    

    询问:

      9  select d.d_name,
     10         e.fname employee,
     11         m.fname  manager
     12  from departments d join employees e on e.depid = d.did
     13                     join employees m on m.depid = d.did and m.eid = d.mgrid;
    
    D_N EMPLOYEE   MANAGER
    --- ---------- ----------
    Web KAVITA     KAVITA
    Web ADITI      KAVITA
    Web ISHAAN     KAVITA
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 2013-05-28
      • 2021-08-22
      • 1970-01-01
      相关资源
      最近更新 更多