2013-09-04 23 views
5

To jest mój pierwszy stół.Left Join w Mysql?

table1

Potem drugi jest

table2

Teraz usiłuję zrobić LEFT JOIN tak

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

Wyjście

output

Jestem zdezorientowany, czy to jest poprawny wynik? Czy nie powinno to zwracać tylko 5 rzędów, które znajdują się w lewej stronie stołu.

Odpowiedz

4

To prawidłowe wyjście. Robisz LEFT JOIN, więc dla każdego rekordu w tabeli LEWEJ DBMS będzie "łączyć" odpowiedni PRAWY rekord tabeli (-s) (i NULL, jeśli nie ma odpowiedniego rekordu dla warunku JOIN, również pamiętaj, że jeśli jest ich więcej niż 1 Odpowiedni rekord - zostanie połączony wszystkie: - z tego powodu otrzymujesz nie tylko 5 rekordów z pierwszego stolika).

Rzecz starasz się osiągnąć powinny być wykonywane przez każdą DISTINCT modyfikatora, tj

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

Więcej o JOIN w SQL można przeczytać here.

1

Te dodatkowe powtarzające się wartości StackId pochodzą z join, wystarczy użyć DISTINCT aby te tylko 5 wartości:

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

Tak, to oczekiwany wynik.

Aby uzyskać odrębne identyfikatory, użyj DISTINCT -

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

Po lewej dołączył tabelę t2 z t1 podstawie stackID, to baza danych dołączy każdy wiersz t2 z każdym rzędem t1 który ma ta sama wartość stackID. Ponieważ 1 pojawia się w sześciu wierszach tabeli t2 jako wartość stackID, wszystkie są połączone z pierwszym wierszem t1. Podobnie jest w przypadku wszystkich innych wartości.

2

Istnieje prosty przykład z lewej dołączyć: -

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

Aby dać sobie trochę więcej zrozumienia, jak lewy dołączyć prace spróbuj tego:

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

zasadzie LEFT JOIN powróci wszystkie wiersze od lewej tabeli plus odpowiadające im z prawej.