题目描述
获取员工其当前的薪水比其manager当前薪水还高的相关信息,当前表示to_date='9999-01-01',
结果第一列给出员工的emp_no,
第二列给出其manager的manager_no,
第三列给出该员工当前的薪水emp_salary,
第四列给该员工对应的manager当前的薪水manager_salary
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
链接:https://www.nowcoder.com/questionTerminal/f858d74a030e48da8e0f69e21be63bef?f=discussion
来源:牛客网
本题主要思想是创建两张表(一张记录当前所有员工的工资,另一张只记录部门经理的工资)进行比较,具体思路如下:
1、先用INNER JOIN连接salaries和demp_emp,建立当前所有员工的工资记录sem
2、再用INNER JOIN连接salaries和demp_manager,建立当前所有员工的工资记录sdm
3、最后用限制条件sem.dept_no = sdm.dept_no AND sem.salary > sdm.salary找出同一部门中工资比经理高的员工,并根据题意依次输出emp_no、manager_no、emp_salary、
select
sa.emp_no,sb.emp_no as manager_no,sa.salary as emp_salary,sb.salary as manager_salary
from
(select
s.salary,de.emp_no,de.dept_no
from dept_emp de
inner join salaries s
on de.emp_no=s.emp_no where s.to_date='9999-01-01') sa
inner join
(select
s.salary,dm.emp_no,dm.dept_no
from dept_manager dm
inner join salaries s
on dm.emp_no=s.emp_no where s.to_date='9999-01-01') sb
on sa.dept_no=sb.dept_no and sa.salary>sb.salary