2016-02-03 53 views
-2

辛苦的时间在我身边缠绕着。这是3张桌子。 enter image description here如何将这3张桌子连接在一起?

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

我想这一点,但我没有得到正确的结果:

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)  | 
+0

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

回答

1

如果你加入EMPLOYEESJOBS直接,你只能得到每一个当前工作雇员。加入EMPLOYEESJOB_HISTORY,你会得到每一项工作的每一位员工曾经与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 
0

我想你应该UNION ALLEMPLOYEESJOB_HISTORY表开始,让他们一起。然后JOINjobs表结果:

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 

(我宁愿只有一个表的所有就业,当前和过去。)

0

要显示员工的当前职位和一个他的旧职称在同一行。 您需要将JOB_HISTORYEMPLOYEESJOBS连接起来。

SELECT 
    E.FIRST_NAME, 
    E.LAST_NAME, 
    J.JOB_TITLE 'Current job title', 
    OJ.JOB_TITLE 'Old job title' 


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

Here is a demo fiddle

相关问题