- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,原题力扣链接
二,题干
员工表:
Employees
+---------------+---------+ | Column Name | Type | +---------------+---------+ | employee_id | int | | employee_name | varchar | | manager_id | int | +---------------+---------+ employee_id 是这个表具有唯一值的列。 这个表中每一行中,employee_id 表示职工的 ID,employee_name 表示职工的名字,manager_id 表示该职工汇报工作的直线经理。 这个公司 CEO 是 employee_id = 1 的人。编写解决方案,找出所有直接或间接向公司 CEO 汇报工作的职工的
employee_id
。由于公司规模较小,经理之间的间接关系 不超过 3 个经理 。
可以以 任何顺序 返回无重复项的结果。
返回结果示例如下。
示例 1:
输入:Employees
table: +-------------+---------------+------------+ | employee_id | employee_name | manager_id | +-------------+---------------+------------+ | 1 | Boss | 1 | | 3 | Alice | 3 | | 2 | Bob | 1 | | 4 | Daniel | 2 | | 7 | Luis | 4 | | 8 | Jhon | 3 | | 9 | Angela | 8 | | 77 | Robert | 1 | +-------------+---------------+------------+ 输出: +-------------+ | employee_id | +-------------+ | 2 | | 77 | | 4 | | 7 | +-------------+ 解释: 公司 CEO 的 employee_id 是 1. employee_id 是 2 和 77 的职员直接汇报给公司 CEO。 employee_id 是 4 的职员间接汇报给公司 CEO 4 --> 2 --> 1 。 employee_id 是 7 的职员间接汇报给公司 CEO 7 --> 4 --> 2 --> 1 。 employee_id 是 3, 8 ,9 的职员不会直接或间接的汇报给公司 CEO。
三,建表语句
Create table If Not Exists Employees (employee_id int, employee_name varchar(30), manager_id int);
Truncate table Employees;
insert into Employees (employee_id, employee_name, manager_id) values ('1', 'Boss', '1');
insert into Employees (employee_id, employee_name, manager_id) values ('3', 'Alice', '3');
insert into Employees (employee_id, employee_name, manager_id) values ('2', 'Bob', '1');
insert into Employees (employee_id, employee_name, manager_id) values ('4', 'Daniel', '2');
insert into Employees (employee_id, employee_name, manager_id) values ('7', 'Luis', '4');
insert into Employees (employee_id, employee_name, manager_id) values ('8', 'John', '3');
insert into Employees (employee_id, employee_name, manager_id) values ('9', 'Angela', '8');
insert into Employees (employee_id, employee_name, manager_id) values ('77', 'Robert', '1');
select * from employees;
四,分析
题解:
表:员工表
字段:员工id,员工姓名,经理id
找出所有直接或间接向公司 CEO 汇报工作的职工的
employee_id
。
第一步:拉平一次,经理id=员工id 拿到上级的姓名 和上级的id
第二步:拉平二次,经理id=员工id 拿到上上级的姓名和id
第三步:过滤 找到经理的三三级是1 且自己不是1的员工id
最后一步,输出最终结果
select * from employees e1 join employees e2 on e1.manager_id=e2.employee_id
join employees e3 on e2.manager_id=e3.employee_id;
五,SQL解答
select e1.employee_id from employees e1 join employees e2 on e1.manager_id=e2.employee_id
join employees e3 on e2.manager_id=e3.employee_id
where e3.manager_id =1 and e1.employee_id !=1;
六,验证
七,知识点总结
- 多级分类拉平表;
- 经典的员工表,经理表
- 自连接的运用
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用