如何在同表中根据关联列获取对应值:员工经理姓名匹配SQL查询
如何查询员工及其直属经理的姓名?
嘿,这是个典型的**自连接(Self-Join)**场景,因为经理本身也是公司的员工,所以我们需要把test1.employee表和自己关联起来,才能正确获取每个员工对应的经理姓名。先帮你拆解下问题,再给出正确的解法:
原查询的问题所在
你写的错误语句:
select employee_Name, employee_Name as manager_Name from employee where Employee_id in (select Manager_ID from employee ) ;
有两个核心问题:
WHERE子句里的Employee_id in (select Manager_ID from employee ),只会筛选出那些本身是经理的员工(也就是Employee_id出现在Manager_ID列里的人),而不是所有员工- 直接把
employee_Name当manager_Name输出,完全没有根据Manager_ID去关联对应的经理信息,结果自然不对
正确的查询语句
我们给同一张表起两个不同的别名(比如e代表普通员工,m代表经理),通过员工的Manager_ID = 经理的Employee_id这个条件来建立关联:
SELECT e.Employee_Name AS employee_Name, m.Employee_Name AS manager_Name FROM test1.employee e JOIN test1.employee m ON e.Manager_ID = m.Employee_id;
实际执行结果
根据你提供的表数据:
Employee_id Employee_Name Manager_ID
1124 Annapurna 1125
1125 Jaseel 1126
1126 Shilpa 1125
执行上面的语句后会得到:
| employee_Name | manager_Name |
|---|---|
| Annapurna | Jaseel |
| Jaseel | Shilpa |
| Shilpa | Jaseel |
小提醒:你给出的预期结果里
Shilpa对应的经理姓名可能是笔误哦,根据表数据Shilpa的Manager_ID是1125,对应的应该是Jaseel,而不是Annapurna。
内容的提问来源于stack exchange,提问作者Annapurna
相关产品推荐
相关产品推荐

