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表中存储了什么?所有工作,包括当前工作?还是刚刚过去的工作?