2013-09-04 5 views
5

Questa è la mia prima tabella.Left Join in Mysql?

table1

Poi il secondo è

table2

Ora sto cercando di fare aderire sinistra come questo

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

uscita

output

Sono confuso qui, è l'uscita corretta? Questo non dovrebbe restituire solo le 5 file che è presente nella tabella di sinistra.

risposta

4

È uscita corretta. Stai facendo LEFT JOIN, quindi per ogni record nella tabella LEFT il DBMS "concatenerà" il corrispondente record della tabella RIGHT (-s) (e NULL, se non c'è alcun record corrispondente per la condizione JOIN, ricorda anche che se ce ne sono altri 1 record corrispondente - tutti gli saranno uniti - questo problema è il motivo per cui non si ricevono solo 5 record dalla tabella 1 °).

La cosa si sta cercando di raggiungere dovrebbe essere fatto o DISTINCT modificatore, vale a dire

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

Maggiori informazioni iscriviti in SQL si può leggere here.

1

Questi valori aggiunti ripetuti di StackId stanno venendo dalla join, basta usare DISTINCT per ottenere quei soli 5 valori:

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

Sì, questo è il risultato atteso.

Per ottenere gli ID distinte, utilizzare DISTINCT -

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

quando avete lasciato iscritto la vostra tavola t2 con t1 sulla base di stackID, quindi il database si uniranno a ogni riga della t2 con ogni fila di t1 che ha lo stesso valore stackID. Poiché 1 viene visualizzato in sei righe nella tabella t2 come valore stackID, tutti sono uniti con la prima riga di t1. La cosa simile è vera per tutti gli altri valori.

2

V'è un semplice esempio di sinistra si uniscono: -

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

per darti un po 'più di comprensione di come una parte di sinistra unirsi opere provare questo:

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

fondamentalmente un LEFT JOIN restituisce tutte le le righe dalla tabella sinistra più quelle corrispondenti da destra.