2016-02-03 55 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

相關問題