题解 | #使用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;
  • 构建两张临时表,然后经过对比最后取出要求的数据
全部评论
注释有个纰漏,因为第一个条件是个双重否定,也可以把not exists改成exists,并且`and de.emp_no != dm.emp_no` ,这样好理解
点赞 回复 分享
发布于 2024-01-29 18:09 上海

相关推荐

04-28 11:34
西北大学 运营
牛客4396号:不好意思,这个照片猛一看像丁真
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务