我有2個表 - Employee和Job_History 和 這兩個表都有3個公共列 - EMPLOYEE_ID,JOB_ID,DEPARTMENT_ID。僅在兩個公共列的基礎上加入2個表(共有3列)
現在,我想加入這兩種使用JOIN但並非所有3組常見的列的基礎上,但只有2個普通列的基礎上的表 - EMPLOYEE_ID和JOB_ID。
我如何得到結果?
我有2個表 - Employee和Job_History 和 這兩個表都有3個公共列 - EMPLOYEE_ID,JOB_ID,DEPARTMENT_ID。僅在兩個公共列的基礎上加入2個表(共有3列)
現在,我想加入這兩種使用JOIN但並非所有3組常見的列的基礎上,但只有2個普通列的基礎上的表 - EMPLOYEE_ID和JOB_ID。
我如何得到結果?
可以在JOIN
on
條款通過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)
這是一個有效的方法,但他不需要*使用'ON'子句。 – McGlothlin
@McGlothlin。 。 。這是編寫查詢的正確方法。我不知道你的評論引用了什麼,但在'ON'子句中加入'JOIN'條件是正確的。 –
哦,在OP的問題的評論中,他說'ON'條款是需要的。我把它表示爲* required *。我只是說有另一種方式來做到這一點。 – McGlothlin
可以JOIN
儘可能多或儘可能少的列你想。 JOIN
條件告訴數據庫如何合併表中的數據。
SELECT EMPLOYEE_ID
FROM EMPLOYEES
JOIN JOB_HISTORY USING (EMPLOYEE_ID, JOB_ID)
如果DEPARTMENT_ID
值也都表,其中EMPLOYEE_ID
和JOB_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, 3
和2, 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_ID
,DEPARTMENT_ID
和JOB_ID
所有匹配給定的行。
你到目前爲止所嘗試的。顯示您的查詢 – JYoThI
根據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,以便我可以獲得所需的輸出。 –
您需要使用On子句。看到我的下面的答案 – JYoThI