Sql 如何将这3个表连接在一起?

Sql 如何将这3个表连接在一起?,sql,join,Sql,Join,很难把我的头绕在这上面。这是三张桌子。 我需要能够显示员工姓名及其当前和以前的工作 我尝试过这个,但没有得到正确的结果: SELECT HR.E.FIRST_NAME, HR.E.LAST_NAME, HR.J.JOB_ID, HR.JH.JOB_ID OLD_JOB_ID FROM HR.JOBS J LEFT JOIN HR.EMPLOYEES E ON E.JOB_ID = J.JOB_ID LEFT JOIN HR.JOB_HISTORY JH ON JH.JOB

很难把我的头绕在这上面。这是三张桌子。

我需要能够显示员工姓名及其当前和以前的工作

我尝试过这个,但没有得到正确的结果:

SELECT
  HR.E.FIRST_NAME,
  HR.E.LAST_NAME,
  HR.J.JOB_ID,
  HR.JH.JOB_ID OLD_JOB_ID

FROM
  HR.JOBS J
LEFT JOIN HR.EMPLOYEES E ON E.JOB_ID = J.JOB_ID
LEFT JOIN HR.JOB_HISTORY JH ON JH.JOB_ID = J.JOB_ID
我得到:

First Name | Last Name | JOB ID | OLD JOB ID |
John       | Smith     | Admin  | (null)     |

如果您直接加入
EMPLOYEES
JOBS
,则您只能为每个员工获得当前职务。将
员工
工作历史
关联,您将获得每个员工曾经拥有的所有工作,并将结果与
工作
关联,以获得每个工作历史条目的相应职务:

SELECT
  HR.E.FIRST_NAME,
  HR.E.LAST_NAME,
  HR.J.JOB_TITLE,
  HR.JH.JOB_ID

FROM
  HR.EMPLOYEES E
LEFT JOIN HR.JOB_HISTORY JH ON JH.EMPLOYEE_ID = E.EMPLOYEE_ID
LEFT JOIN HR.JOBS J ON J.JOB_ID = JH.JOB_ID

我想你应该从
UNION ALL
EMPLOYEES和
JOB\u HISTORY
表开始,把它们放在一起。然后,
JOIN
将结果与
jobs
表连接:

select *
from jobs j
join (select * from EMPLOYEES
      UNION ALL
      select * from JOB_HISTORY) as all_emp
  ON all_emp.JOB_ID = j.JOB_ID 

(我希望所有员工(包括当前员工和过去员工)都只有一个表。

JOB_HISTORY表中存储了什么?所有工作,包括当前工作?还是刚刚过去的工作?