SQL219
原本的思路如下:
#1、获取每个员工的薪水
#2、获取每个部门经理的薪水
#3、比较大小
select a.emp_no,b.manager_no,a.emp_salary,b.manager_salary
from
(select s.emp_no,salary emp_salary,dept_no
from salaries s inner join dept_emp de on s.emp_no=de.emp_no
where s.emp_no not in(
select emp_no from dept_manager) )a
inner join
(select s.emp_no manager_no,salary manager_salary,dept_no
from salaries s inner join dept_emp de on s.emp_no=de.emp_no
where s.emp_no in(
select emp_no from dept_manager) )b
on a.dept_no=b.dept_no
where a.emp_salary>b.manager_salary
看了大佬的思路后发现自己想复杂了,不需要一定得把员工和经理区分清楚
将第一个第二个表分别和第三个表相连,就得到了员工和经理的薪水情况,这时候直接判断员工的薪水是否大于经理即可,因为员工表中虽然有经理的信息,但是经过比较大小后其相等的关系可以被直接筛选掉,同样能得到符合要求的结果,简易的思路如下:
select a.emp_no,
b.emp_no manager_no,
c.salary emp_salary,
d.salary manager_salary
from dept_emp a inner join
dept_manager b on a.dept_no = b.dept_no inner join
salaries c on a.emp_no = c.emp_no inner join
salaries d on b.emp_no = d.emp_no
where c.salary > d.salary
#1、获取每个员工的薪水
#2、获取每个部门经理的薪水
#3、比较大小
select a.emp_no,b.manager_no,a.emp_salary,b.manager_salary
from
(select s.emp_no,salary emp_salary,dept_no
from salaries s inner join dept_emp de on s.emp_no=de.emp_no
where s.emp_no not in(
select emp_no from dept_manager) )a
inner join
(select s.emp_no manager_no,salary manager_salary,dept_no
from salaries s inner join dept_emp de on s.emp_no=de.emp_no
where s.emp_no in(
select emp_no from dept_manager) )b
on a.dept_no=b.dept_no
where a.emp_salary>b.manager_salary
看了大佬的思路后发现自己想复杂了,不需要一定得把员工和经理区分清楚
将第一个第二个表分别和第三个表相连,就得到了员工和经理的薪水情况,这时候直接判断员工的薪水是否大于经理即可,因为员工表中虽然有经理的信息,但是经过比较大小后其相等的关系可以被直接筛选掉,同样能得到符合要求的结果,简易的思路如下:
select a.emp_no,
b.emp_no manager_no,
c.salary emp_salary,
d.salary manager_salary
from dept_emp a inner join
dept_manager b on a.dept_no = b.dept_no inner join
salaries c on a.emp_no = c.emp_no inner join
salaries d on b.emp_no = d.emp_no
where c.salary > d.salary
全部评论
相关推荐


点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享