2017-07-08 49 views
1

2つのテーブル - EmployeeとJob_History と 両方のテーブルには、EMPLOYEE_ID、JOB_ID、DEPARTMENT_IDの3つの共通列があります。 EMPLOYEE_IDおよびJOB_ID - 今2つの共通の列を持つ2つのテーブルに結合する

私がすべてではありません3つの共通の列をもとにだけ2共通の列に基づいてをJOINを使用してテーブルの両方に参加したいと思います。

どうすれば結果を得ることができますか?

+0

これまでに試したことはありますか? – JYoThI

+0

1列に基づいて2つのテーブルを結合しました。
EMPLOYEESからEMPLOYEE_IDを選択JOIN JOB_HISTORY USING(EMPLOYEE_ID);
すべての3列に基づいて2つのテーブルを結合しました。
SELECT EMPLOYEE_ID、JOB_ID、DEPARTMENT_ID from EMPLOYEES NATURAL JOIN JOB_HISTORY;
しかし、希望の出力を得るためにどのJOINを使うべきか分かりません。 –

+0

あなたはOn句を使用する必要があります。私の下の答えを参照してください – JYoThI

答えて

1

あなたはな数の列にJOINはあなたが好きなことができますように、この

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

ようJOINon句でmultiple条件を渡すことができます。 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、テーブルAとテーブルBに2, 3, 41, 2, 3た場合は:

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 

所与の行の3つの列、EMPLOYEE_IDDEPARTMENT_ID、及びJOB_ID全て一致なしの場合が存在しないため、結果セットは結果を返さないことになります。

関連する問題