牛客网数据库SQL实战11—— 获取所有员工当前的manager

牛客网数据库SQL实战11—— 获取所有员工当前的manager

题目描述

获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date=‘9999-01-01’。
结果第一列给出当前员工的emp_no,第二列给出其manager对应的manager_no。

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`));

输入描述:

输出描述:

emp_no manager_no
10001 10002
10003 10004
10009 10010

我的解答

select de.emp_no,dm.emp_no as manager_no
from dept_emp de
left join dept_manager dm
on de.dept_no = dm.dept_no
where de.to_date='9999-01-01'
and dm.to_date='9999-01-01'
and de.emp_no <> dm.emp_no

注意点:

  1. 两个表共同查询的切入点是dept_no,其中dept_emp是所有部门员工的信息,而dept_manager是部门manager信息,所以每个员工找相应的manager,只需两表dept_no对应即可;
  2. 要求是自己的不显示,则两个dept_no相同,但emp_no不相等
  3. to_date相等,都是’9999-01-01’。

我觉得最好的答案

本题应注意以下三点:

  1. 用 INNER JOIN 连接两张表,因为要输出自己的经理,得知自己与经理的部门要相同,故有限制条件 de.dept_no = dm.dept_no
  2. 再用 WHERE 限制当前员工与当前经理的条件,即 dm.to_date 等于 ‘9999-01-01’ 、de.to_date 等于 ‘9999-01-01’ 、 de.emp_no 不等于 dm.emp_no
  3. 为了增强代码可读性,将 dept_emp 用别名 de 代替,dept_manager 用 dm 代替,最后根据题意将 de.emp_no 用别名 manager_no 代替后输出
SELECT de.emp_no, dm.emp_no AS manager_no 
FROM dept_emp AS de INNER JOIN dept_manager AS dm
ON de.dept_no = dm.dept_no 
WHERE dm.to_date = '9999-01-01' AND de.to_date = '9999-01-01' AND de.emp_no <> dm.emp_no
发布了175 篇原创文章 · 获赞 58 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/sunbocong/article/details/105484412