链接:https://www.nowcoder.com/questionTerminal/f858d74a030e48da8e0f69e21be63bef?toCommentId=8121443
来源:牛客网
[编程题]获取员工其当前的薪水比其manager当前薪水还高的相关信息
- 热度指数:120259 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
- 算法知识视频讲解
获取员工其当前的薪水比其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`));
输入描述:
无
输出描述:
emp_no | manager_no | emp_salary | manager_salary |
---|---|---|---|
10001 | 10002 | 88958 | 72527 |
10009 | 10010 | 95409 | 94409 |
示例1
输入
无
输出
无
SELECT
de.emp_no AS emp_no,
dm.emp_no AS manager_no,
de.salary AS emp_salary,
dm.salary AS manager_salary
FROM
(
SELECT
de.emp_no,
s.salary,
de.dept_no
FROM
dept_emp AS de
LEFT JOIN salaries AS s ON de.emp_no = s.emp_no
WHERE
s.to_date = '9999-01-01'
) AS de
INNER JOIN (
SELECT
dm.emp_no,
s.salary,
dm.dept_no
FROM
dept_manager AS dm
LEFT JOIN salaries AS s ON dm.emp_no = s.emp_no
WHERE
s.to_date = '9999-01-01'
) AS dm on de.dept_no = dm.dept_no
WHERE
AND de.salary > dm.salary
首先,我们应该发现控制to_date的是工资表而不是员工表。然后只需要使用join即可。