SQL_205
获取所有员工当前的manager
https://www.nowcoder.com/practice/e50d92b8673a440ebdf3a517b5b37d62
方法一:
思路:先子查询出普通员工表 t,再左连接上部门经理表 dept_manager, 连接条件为 t.dept_no = d.dept_no
代码:
select t.emp_no emp_no,d.emp_no manager from (select emp_no,dept_no from dept_emp where emp_no not in (select emp_no from dept_manager) ) t left join dept_manager d on t.dept_no = d.dept_no
方法二:
思路: 解题思路:重点要理解两表之间的逻辑关系和题目要求。有三个关键点:
①每个部门都有一个 manager 每个人都有自己所在的部门。所以用部门号 dept_no 作为联结条件,左联结和内联结都可以;
②如果员工当前的 manager 是自己的话结果不显示,这就要求 dept_emp 表的员工编号 emp_no 和 dept_manager 的员工编号不相等;
③题目要求当前的 manager,所以最后的经理表 dept_manager 的时间为 to_date='9999-01-01',严谨起见,员工表 dept_emp 的时间也应该是 to_date='9999-01-01'。
代码:
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;