【问题标题】:Sql query get all subordinates of manager given the manager name [closed]Sql查询获取经理的所有下属给定经理名称[关闭]
【发布时间】:2016-05-06 09:02:58
【问题描述】:

我有一个查询,我没有得到正确的答案。请仔细查看

员工数据存储在包含以下列的 Employee 表中:

EmployeeId (Varchar) 名称(Varchar) ManagerId (Varchar) ManagerId 是指员工向其汇报的经理的员工id。

假设所有员工姓名都是唯一的,编写一个查询以获取所有直属下属给定经理姓名的姓名

【问题讨论】:

标签: mysql sql key


【解决方案1】:
SELECT Name
FROM   Employee
WHERE  ManagerId = (SELECT manager.EmployeeId
                    FROM   Employee AS manager
                    WHERE  manager.Name = '.....');

或使用自联接:

SELECT empl.Name
FROM   Employee mana
JOIN   Employee empl
  ON   mana.EmployeeId = empl.ManagerId
WHERE  mana.Name = '.....';

【讨论】:

  • 自连接查询不会返回想要的输出
  • @PirateX:你能解释一下原因吗?我做错了什么?
  • 我的错。您的查询非常好。
【解决方案2】:

EMP 表中的内容

+-------+--------+-----------+------+-------------+------+------+--------+
| EMPNO | ENAME  |    JOB    | MGR  |  HIREDATE   | SAL  | COMM | DEPTNO |
+-------+--------+-----------+------+-------------+------+------+--------+
|  7839 | KING   | PRESIDENT |      | 17/Nov/1981 | 5000 |      |     10 |
|  7698 | BLAKE  | MANAGER   | 7839 | 01/May/1981 | 2850 |      |     30 |
|  7782 | CLARK  | MANAGER   | 7839 | 09/Jun/1981 | 2450 |      |     10 |
|  7566 | JONES  | MANAGER   | 7839 | 02/Apr/1981 | 2975 |      |     20 |
|  7788 | SCOTT  | ANALYST   | 7566 | 09/Dec/1982 | 3000 |      |     20 |
|  7902 | FORD   | ANALYST   | 7566 | 03/Dec/1981 | 3000 |      |     20 |
|  7369 | SMITH  | CLERK     | 7902 | 17/Dec/1980 |  800 |      |     20 |
|  7499 | ALLEN  | SALESMAN  | 7698 | 20/Feb/1981 | 1600 |  300 |     30 |
|  7521 | WARD   | SALESMAN  | 7698 | 22/Feb/1981 | 1250 |  500 |     30 |
|  7654 | MARTIN | SALESMAN  | 7698 | 28/Sep/1981 | 1250 | 1400 |     30 |
|  7844 | TURNER | SALESMAN  | 7698 | 08/Sep/1981 | 1500 |    0 |     30 |
|  7876 | ADAMS  | CLERK     | 7788 | 12/Jan/1983 | 1100 |      |     20 |
|  7900 | JAMES  | CLERK     | 7698 | 03/Dec/1981 |  950 |      |     30 |
|  7934 | MILLER | CLERK     | 7782 | 23/Jan/1982 | 1300 |      |     10 |
+-------+--------+-----------+------+-------------+------+------+--------+

查询

   SELECT e1.empno EmployeeId, e1.ename EmployeeName, 
           e1.mgr ManagerId, e2.ename AS ManagerName
    FROM   emp e1, emp e2
           where e1.mgr = e2.empno
           and e2.ename='JONES';

自加入

select *
from emp employee
join emp manager
on manager.empno=employee.mgr
where manager.ename='JONES'

结果

+------------+--------------+-----------+-------------+
| EMPLOYEEID | EMPLOYEENAME | MANAGERID | MANAGERNAME |
+------------+--------------+-----------+-------------+
|       7902 | FORD         |      7566 | JONES       |
|       7788 | SCOTT        |      7566 | JONES       |
+------------+--------------+-----------+-------------+

P.S - 我在 Oracle DB 而不是 MySQL 上进行了测试。但是代码仍然适用于 MySQL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多