题目
表: Employees
Column Name | Type |
---|---|
employee_id | int |
name | varchar |
manager_id | int |
salary | int |
在 SQL 中,employee_id 是这个表的主键。 这个表包含了员工,他们的薪水和上级经理的id。 有一些员工没有上级经理(其 manager_id 是空值)。
查找这些员工的id,他们的薪水严格少于$30000 并且他们的上级经理已离职。当一个经理离开公司时,他们的信息需要从员工表中删除掉,但是表中的员工的manager_id 这一列还是设置的离职经理的id 。
返回的结果按照employee_id 从小到大排序。
查询结果如下所示:
示例:
输入:
Employees table:
employee_id | name | manager_id | salary |
---|---|---|---|
3 | Mila | 9 | 60301 |
12 | Antonella | null | 31000 |
13 | Emery | null | 67084 |
1 | Kalel | 11 | 21241 |
9 | Mikaela | null | 50937 |
11 | Joziah | 6 | 28485 |
输出:
employee_id |
---|
11 |
解释:
- 薪水少于 30000 美元的员工有 1 号(Kalel) 和 11号 (Joziah)。
- Kalel 的上级经理是 11 号员工,他还在公司上班(他是 Joziah )。
- Joziah 的上级经理是 6 号员工,他已经离职,因为员工表里面已经没有 6 号员工的信息了,它被删除了。
题解
sql
SELECT `e`.`employee_id`
FROM `Employees` `e`
WHERE `e`.`salary` < 30000
AND `e`.`manager_id` IS NOT NULL
AND NOT EXISTS(SELECT 1 FROM `Employees` WHERE `employee_id` = `e`.`manager_id`)
ORDER BY `e`.`employee_id`
1
2
3
4
5
6
2
3
4
5
6