2013-09-04 6 views
5

Dies ist meine erste Tabelle.Links Mitmachen in Mysql?

table1

Dann wird der zweite ist

table2

Jetzt versuche ich, dies zu tun LEFT JOIN wie

SELECT t1.StackID FROM t1 LEFT JOIN t2 on t1.StackID=t2.StackID 

Ausgabe

output

Ich bin hier verwirrt, ist das die richtige Ausgabe? Soll das nicht nur die 5 Zeilen zurückgeben, die in der linken Seitentabelle vorhanden sind.

Antwort

4

Es ist korrekt ausgegeben. Sie tun LEFT JOIN, so für jeden Datensatz in LINKE Tabelle DBMS "verkettet" den entsprechenden RECHTEN Tabelleneintrag (-s) (und NULL, wenn es keinen entsprechenden Datensatz für die JOIN Bedingung gibt; auch wenn es mehr als 1 gibt entsprechenden Datensatz - alle wird beitreten - dieses Problem ist, warum Sie nicht nur 5 Datensätze aus 1-st Tabelle erhalten).

Das Ding Sie versuchen, entweder durch DISTINCT Modifikator, das heißt

SELECT DISTINCT t1.StackID FROM t1 LEFT JOIN t2 ON t1.StackID=t2.StackID; 

Mehr über JOIN in SQL zu erreichen, sollte man here lesen kann getan werden.

1

Diese zusätzlichen wiederholten Werte von StackId kommen von der join, nur DISTINCT verwenden, um diese nur 5 Werte zu erhalten:

SELECT DISTINCT t1.StackID 
FROM t1 
LEFT JOIN t2 on t1.StackID=t2.StackID; 
1

Ja, das ist die erwartete Ausgabe.

Um die eindeutigen IDs zu erhalten, verwenden DISTINCT -

SELECT DISTINCT t1.StackID 
FROM t1 
LEFT JOIN t2 
ON t1.StackID=t2.StackID 

Wenn Sie Ihre t2 Tabelle mit t1 basierend auf stackID treten nach links, dann wird die Datenbank jede Zeile von t2 mit jeder Reihe von t1 verbinden, die hat das gleiche stackID Wert. Da 1 in sechs Zeilen in der t2 Tabelle als stackID Wert angezeigt wird, sind alle von ihnen mit der ersten Zeile t1 verbunden. Ähnliches gilt für alle anderen Werte.

2

Es gibt ein einfaches Beispiel LEFT JOIN: -

SELECT * FROM a JOIN b LEFT JOIN c ON (c.key=a.key) LEFT JOIN d ON (d.key=a.key) 
WHERE b.key=d.key; 
0

zu geben, sich ein wenig mehr Verständnis dafür, wie ein LEFT JOIN funktioniert versuchen Sie dies:

SELECT t1.StackID, t2.StackID FROM t1 LEFT JOIN t2 on t1.StackID=t2.StackID 

im Grunde ein LEFT JOIN kehrt alle die Zeilen von der linken Tabelle plus die passenden von rechts.