方法一:

思路:

先用员工编号 not in 经理表,找出所有员工,join 上部门员工表,join 上工资表,查询出结果即可。

代码:

select
    dp.dept_no,
    e.emp_no,
    salary
from
    (
        select
            emp_no
        from
            employees
        where
            emp_no not in (
                select
                    emp_no
                from
                    dept_manager
            )
    ) e
    left join dept_emp dp on e.emp_no = dp.emp_no
    left join salaries s on dp.emp_no = s.emp_no

方法二:

思路:

①先将部门员工表 dept_emp 和部门 经理表 dept_manager 联结,由 dept_emp 的员工编号和 dept_manager 的员工编号不相等找出非 manager 员工。

②再联结工资表找出工资,记得限定工资表 salaries 和员工表 dept_emp 的时间都为 to_date='9999-01-01'

最后记得按部门编号和员工编号升序

代码:

SELECT
    a.dept_no,
    a.emp_no,
    s.salary
FROM
    (
        SELECT
            de.emp_no,
            de.dept_no
        FROM
            dept_emp de
            INNER JOIN dept_manager dm ON de.dept_no = dm.dept_no
        WHERE
            de.emp_no <> dm.emp_no
            AND de.to_date = '9999-01-01'
    ) a
    INNER JOIN salaries s ON a.emp_no = s.emp_no
WHERE
    s.to_date = '9999-01-01'
order by
    a.dept_no,
    a.emp_no