2016-05-13 9 views
0

Ich muss linken äußeren Join verwenden, ich bin verwirrt, um die Logik zu finden, warum ich 1 Tabelle in der linken und eine andere in rechts wählen, ist Gibt es einen Grund dafür?Warum erste Tabelle links und Sekunde rechts in links/rechts Join in SQL-Server

Für z. Ich kann links erraten Tisch sein sollte, eine, die in Joinspalte NULL-Wert

+2

Sie erhalten alle Zeilen aus der Tabelle "linke Seite" und nur übereinstimmende Zeilen aus der Tabelle "rechte Seite" in einer "linken Verknüpfung". Das ist die genaue Bedeutung, also im Grunde, von welcher Tabelle wollen Sie alle Zeilen? –

+0

@ Lasse V. Karlsen- Meine Frage ist nicht über die Funktionalität der Links/Rechts-Join. Mein Zweifel ist, ich kann erreichen, was ich von Linke Join und das gleiche Ergebnis von Right Join durch Austauschen des Tabellennamens erreichen möchte, dann wann zu verwenden Right/Left –

Antwort

0

Siehe hierzu

http://www.programmerinterview.com/index.php/database-sql/difference-between-a-left-outer-join-and-right-outer-join/

Der Unterschied ist einfach - in einem linken äußeren Verknüpfung, um alle Zeilen aus dem „linken "Tabelle wird angezeigt, unabhängig davon, ob in der" richtigen "Tabelle passende Spalten vorhanden sind. In einem rechten äußeren Join werden alle Zeilen aus der "rechten" Tabelle angezeigt, unabhängig davon, ob in der "linken" Tabelle übereinstimmende Spalten vorhanden sind. Bitte beachten Sie die Beispiele in der freigegebenen URL.

Bitte google es können Sie finden, was Sie brauchen.

+0

Meine Frage ist nicht über die Funktionalität von Links/Rechts Join. Mein Zweifel ist, ich kann erreichen, was ich von Linke Join und das gleiche Ergebnis von Right Join durch Austauschen des Tabellennamens erreichen möchte, dann wann zu verwenden Right/Left –

0
CREATE TABLE #Evaluation (ID int IDENTITY(1,1), EvalName varchar(30), EvalDate datetime) 
CREATE TABLE #EvaluationDetails (ID int IDENTITY(1,1), EvalID int, Points decimal(22,6), Question varchar(100)) 


declare @Date datetime 
set @Date = GETDATE() 
INSERT INTO #Evaluation VALUES ('Specific question',@Date) 

INSERT INTO #EvaluationDetails VALUES (1,10,'First question first evaluation') 
INSERT INTO #EvaluationDetails VALUES (1,5,'SEcond question first evaluation') 
INSERT INTO #EvaluationDetails VALUES (1,0,'Third question first evaluation') 

INSERT INTO #EvaluationDetails VALUES (null,0,'First question therd evaluation') 


SELECT * FROM #Evaluation e 
join #EvaluationDetails ed on ed.EvalID = e.ID 

SELECT * FROM #Evaluation e 
left join #EvaluationDetails ed on ed.EvalID = e.ID 

SELECT * FROM #Evaluation e 
right join #EvaluationDetails ed on ed.EvalID = e.ID 



DROP TABLE #Evaluation 
DROP TABLE #EvaluationDetails 

Nehmen wir das folgende Beispiel. Das Ergebnis der Abfragen (Join/links/rechts)

enter image description here

So wie Sie haben wir 2 Bewertung sehen können, die ihre Daten in einem anderen Tisch. Es ist ein matter von dem, was du bekommen willst. WENN Sie interessiert sind, alle Bewertung zu bekommen, die Details (Fragen) haben. Du machst einen einfachen Join. Wenn Sie alle Auswertungen erhalten wollen, auch diejenigen, die keine Antwort haben, machen Sie einen Link zwischen #Evaluation und #EvaluationDetails. Wenn Sie alle Fragen, auch diejenigen, die keine Bewertung haben, erhalten möchten, tun Sie das richtige beitreten.

So funktioniert Joins. Natürlich, wenn Sie die Tabellen wechseln und #EvaluationDetails mit #Evaluation beitreten, wechseln Sie auch die Joins, so dass der linke Join rechts Join wird und der rechte Join Links Join wird.

+0

@ CiucaS - Meine Frage ist nicht über die Funktionalität von Links/Rechts Join. Mein Zweifel ist, ich kann erreichen, was ich von Linke Join und das gleiche Ergebnis von Right Join durch Austauschen des Tabellennamens, dann wenn Right/Left –

+0

@BrijeshKumar verwenden möchte ich denke, der einzige Unterschied, den ich finde, ist mit 'SELECT * FROM' becouse Spalten werden in der Weise angezeigt, wie die Tabellen zum Join hinzugefügt werden. Wenn Sie die Joins und die Tabellen vertauschen, wird dies zu einer anderen Spaltenanzeige führen und die Order by-Klausel beeinflussen (Order by kann mit 1, 2, 3 als Spaltennummer von select verwendet werden). – CiucaS

Verwandte Themen