2017-07-08 80 views
1

我有2個表 - Employee和Job_History 和 這兩個表都有3個公共列 - EMPLOYEE_ID,JOB_ID,DEPARTMENT_ID。僅在兩個公共列的基礎上加入2個表(共有3列)

現在,我想加入這兩種使用JOIN但並非所有3組常見的列的基礎上,但只有2個普通列的基礎上的表 - EMPLOYEE_ID和JOB_ID

我如何得到結果?

+0

你到目前爲止所嘗試的。顯示您的查詢 – JYoThI

+0

根據1列加入兩個表:
SELECT EMPLOYEE_ID FROM EMPLOYEES JOIN JOB_HISTORY USING(EMPLOYEE_ID);
在所有3列的基礎上加入兩個表:
SELECT EMPLOYEE_ID,JOB_ID,DEPARTMENT_ID FROM EMPLOYEES NATURAL JOIN JOB_HISTORY;
但我不知道應該使用哪個JOIN,以便我可以獲得所需的輸出。 –

+0

您需要使用On子句。看到我的下面的答案 – JYoThI

回答

1

可以在JOINon條款通過multiple條件這樣

select E.* ,J.* 
from Employee as E 
    inner join Job_History as J 
    on (E.EMPLOYEE_ID=J.EMPLOYEE_ID 
     and E.JOB_ID=J.JOB_ID) 
+0

這是一個有效的方法,但他不需要*使用'ON'子句。 – McGlothlin

+0

@McGlothlin。 。 。這是編寫查詢的正確方法。我不知道你的評論引用了什麼,但在'ON'子句中加入'JOIN'條件是正確的。 –

+0

哦,在OP的問題的評論中,他說'ON'條款是需要的。我把它表示爲* required *。我只是說有另一種方式來做到這一點。 – McGlothlin

1

可以JOIN儘可能多或儘可能少的列你想。 JOIN條件告訴數據庫如何合併表中的數據。

SELECT EMPLOYEE_ID 
FROM EMPLOYEES 
JOIN JOB_HISTORY USING (EMPLOYEE_ID, JOB_ID) 

如果DEPARTMENT_ID值也都表,其中EMPLOYEE_IDJOB_ID是等價的匹配,結果集將是一樣的,不管你是否還包括DEPARTMENT_ID

如果我有每個表中的列如下:

Table A 
EMPLOYEE_ID DEPARTMENT_ID JOB_ID Other_Column1 Other_Column2 
1   1    1  stuff   things 
2   2    2  stuff   things 
3   3    3  stuff   things 

Table B 
EMPLOYEE_ID DEPARTMENT_ID JOB_ID Other_Column3 Other_Column4 
1   1    1  stuff   things 
2   2    2  stuff   things 
3   3    3  stuff   things 

然後加入將相當於你是否包括DEPARTMENT_ID與否。但是,如果DEPARTMENT_ID表B中均表A 1, 2, 32, 3, 4

Table A 
EMPLOYEE_ID DEPARTMENT_ID JOB_ID Other_Column1 Other_Column2 
1   1    1  stuff   things 
2   2    2  stuff   things 
3   3    3  stuff   things 

Table B 
EMPLOYEE_ID DEPARTMENT_ID JOB_ID Other_Column3 Other_Column4 
1   2    1  stuff   things 
2   3    2  stuff   things 
3   4    3  stuff   things 

因爲沒有案件的結果集將返回任何結果,其中三列,EMPLOYEE_IDDEPARTMENT_IDJOB_ID所有匹配給定的行。

相關問題