方法一:

思路:先子查询出普通员工表 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;