如何查询与经理居住在同一城市的员工姓名?
找出与直属经理居住在同一城市的员工姓名
需求:编写SQL查询语句,找出所有与直属经理居住在同一城市的员工姓名。
数据表结构及数据
employee表(包含普通员工和经理)
| employeeid | name | projectid | city |
|---|---|---|---|
| 1 | jeff | 1 | new york |
| 2 | larry | 1 | new york |
| 3 | Linda | 2 | detroit |
| 4 | tom | 2 | LA |
Managertable表(记录项目与直属经理的对应关系)
| projectid | mangerid |
|---|---|
| 1 | 2 |
| 2 | 3 |
当前已实现的代码
你已能筛选出非经理员工,但不清楚如何对比员工与经理的城市信息,现有代码:
SELECT name FROM employee e WHERE employeeid not in( SELECT mangerid FROM Managertable pm INNER JOIN employee e ON pm.mangerid= e.employeeid);
解决方案
要实现需求,无需复杂子查询,通过多次关联employee表即可完成:
- 先通过
Managertable关联员工表,获取每个员工对应的直属经理ID; - 再次关联
employee表拿到经理的城市信息,与员工城市做对比。
最终SQL语句如下:
SELECT e.name AS `employee name` FROM employee e JOIN Managertable mt ON e.projectid = mt.projectid JOIN employee m ON mt.mangerid = m.employeeid WHERE e.employeeid != m.employeeid -- 排除经理自身 AND e.city = m.city;
语句说明
- 第一次关联
Managertable,建立员工和其所属项目经理ID的关联; - 第二次关联
employee表(别名m代表经理),获取经理的城市数据; - 通过
e.city = m.city筛选出与经理同城市的员工,e.employeeid != m.employeeid确保结果中不包含经理本人。
执行该语句后,将得到预期结果:
| employee name |
|---|
| jeff |
内容的提问来源于stack exchange,提问作者Vin rich
相关产品推荐
相关产品推荐

