SQL练习25:获取员工其当前的薪水比其manager当前薪水还高的相关信息
题目链接:牛客网
题目描述
获取员工其当前的薪水比其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`));
解法
根据题目的要求,我们可以先获得两张表,员工薪水表,manager
薪水表,再将这两张表连接起来,筛选在部门相同的情况下,员工的工资大于manager
的数据。
SELECT de.emp_no, dm.emp_no manager_no, es.salary emp_salary, ms.salary manager_salary
FROM (dept_emp de JOIN salaries es ON de.emp_no = es.emp_no AND es.to_date = '9999-01-01')
, (dept_manager dm JOIN salaries ms ON dm.emp_no = ms.emp_no AND ms.to_date = '9999-01-01')
WHERE de.dept_no = dm.dept_no AND es.salary > ms.salary