题解 | #使用with建表的方式#
获取员工其当前的薪水比其manager当前薪水还高的相关信息
https://www.nowcoder.com/practice/f858d74a030e48da8e0f69e21be63bef
-- 使用whit子句分别建两张临时表来对照,别看长,其实更易于理解
-- 分别是员工表和经理表
with employee as (
select
de.emp_no,de.dept_no,s.salary
from dept_emp de join salaries s on de.emp_no = s.emp_no
-- 以下条件不成立则说明属于非经理
where not exists(
select 1 from dept_manager dm
where de.dept_no = dm.dept_no -- 确保同属一个部门 true
and de.emp_no = dm.emp_no -- 员工的id不存在于dept_namager表中 false
)
),
manager as (
select
de.emp_no,de.dept_no,s.salary
from dept_emp de join salaries s on de.emp_no = s.emp_no
-- 条件成立则是经理
where exists(
select 1 from dept_manager dm
where de.dept_no = dm.dept_no
and de.emp_no = dm.emp_no
)
)
-- 提取相应的信息即可
select
e.emp_no,m.emp_no as manager_no,e.salary as emp_salary,m.salary as manager_salary
from employee e join manager m on e.dept_no = m.dept_no
-- 它这里是有得比经理挣得多的条件的
where e.salary > m.salary;
- 构建两张临时表,然后经过对比最后取出要求的数据