2022.02.15 更新

再次感谢评论区的朋友纠正!!!

之前有朋友评论区说的不用连接员工表就可以的方法最近又通不过了。。。所以掌柜再次更新了解法,下面是测试和提交都可以通过的代码:

SELECT d.dept_no, d.emp_no, s.salary FROM employees e 
JOIN dept_emp d ON e.emp_no = d.emp_no 
JOIN dept_manager d1 ON d.dept_no = d1.dept_no AND d.emp_no <> d1.emp_no 
JOIN salaries s ON d.emp_no = s.emp_no 
WHERE s.to_date = '9999-01-01' ORDER BY e.emp_no;

感谢大家的积极反馈🤝

-----------------------------------我是纠正分割线---------------------------------

看了好多解法都是用NOT IN 的, 我就说说我这个没用NOT IN 的解法吧。

  • 思路:

    • 首先还是employees表和dept_emp员工部门表连接,找到员工和部门的关系;
    • 接着连接dept_manager表,注意这里连接条件👉部门id即dept_no要相等;但是员工id即emp_no要不相等。emp_no不相等的就是非manager员工。
    • 最后连接salaries表,按emp_no连接,就找到每个员工对应的工资;别忘了筛选条件是当前日期!
  • 完整的代码就是:

SELECT d.dept_no, d.emp_no, s.salary FROM employees e 
JOIN dept_emp d ON e.emp_no = d.emp_no 
JOIN dept_manager d1 ON d.dept_no = d1.dept_no AND d.emp_no <> d1.emp_no 
JOIN salaries s ON d.emp_no = s.emp_no 
WHERE s.to_date = '9999-01-01' ORDER BY e.emp_no;

不过运行时间不是最优的🤣。