2017-07-08 1 views
1

Ich habe 2 Tabellen - Mitarbeiter und Job_History und Beide Tabellen haben 3 gemeinsame Spalten drin - EMPLOYEE_ID, JOB_ID, DEPARTMENT_ID.Joining 2 Tabellen (mit 3 gemeinsamen Spalten) auf der Grundlage von nur zwei gemeinsamen Spalten

Nun Ich mag sowohl die Tabellen verknüpfen mit JOIN aber nicht auf der Grundlage aller drei gemeinsamen Spalt sondern auf der Grundlage von nur zwei gemeinsamen Spalten - EMPLOYEE_ID und JOB_ID.

Wie kann ich das Ergebnis erhalten?

+0

was Sie bisher versucht haben. zeigen Sie Ihre Abfrage – JYoThI

+0

Joined zwei Tabellen auf der Grundlage von 1 Spalte:
SELECT EMPLOYEE_ID VON MITARBEITER JOIN JOB_HISTORY VERWENDEN (EMPLOYEE_ID);
Verknüpft zwei Tabellen auf der Grundlage aller 3 Spalte:
SELECT EMPLOYEE_ID, JOB_ID, DEPARTMENT_ID VON MITARBEITERN NATURAL JOIN JOB_HISTORY;
Aber ich weiß nicht, welchen JOIN ich verwenden sollte, damit ich die gewünschte Ausgabe bekommen kann. –

+0

müssen Sie On-Klausel verwenden. siehe meine Antwort unter – JYoThI

Antwort

1

Sie können multiple Zustand in JOINon Klausel wie diese

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

Dies ist eine gültige Methode, aber er braucht * nicht * die ON-Klausel zu verwenden. – McGlothlin

+0

@ McGlothlin. . . Dies ist die richtige Methode zum Schreiben der Abfrage. Ich weiß nicht, worauf sich Ihr Kommentar bezieht, aber die 'JOIN'-Bedingungen in der 'ON'-Klausel sind korrekt. –

+0

Oh, in einem Kommentar zu OPs Frage sagte er, dass die ON-Klausel notwendig sei. Ich habe das so verstanden, dass ich * benötigt * habe. Ich sage nur, dass es einen anderen Weg gibt, es zu tun. – McGlothlin

1

passieren Sie können JOIN auf so viele oder so wenige Spalten, wie Sie möchten. Die JOIN Bedingungen teilt der Datenbank mit, wie die Daten aus den Tabellen zusammengeführt werden.

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

Wenn die Werte in DEPARTMENT_ID auch in beiden Tabellen zusammenpassen, wo EMPLOYEE_ID und JOB_ID äquivalent sind, wird die Ergebnismenge das gleiche sein, unabhängig davon, ob Sie auch DEPARTMENT_ID enthalten.

Wenn ich die folgenden Spalten in jeder Tabelle haben:

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 

dann schließt sich das Äquivalent wäre, ob Sie DEPARTMENT_ID oder nicht enthalten. Allerdings, wenn DEPARTMENT_ID waren 1, 2, 3 in Tabelle A und 2, 3, 4 in Tabelle B:

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 

die Ergebnismenge würde keine Ergebnisse zurückgeben, weil es keine Fälle, in denen die drei Säulen, EMPLOYEE_ID, DEPARTMENT_ID und JOB_ID alle Spiele für eine bestimmte Zeile .

Verwandte Themen