È possibile scrivere query di join senza ON
istruzione? e come funzionano questi join differiscono LEFT JOIN, RIGHT JOIN
.
È possibile scrivere query di join senza ON
istruzione? e come funzionano questi join differiscono LEFT JOIN, RIGHT JOIN
.
Risposte:
La documentazione di MySQL copre questo argomento.
Ecco una sinossi. Quando si utilizza join
o inner join
, la on
condizione è facoltativa. Questo è diverso dallo standard ANSI e diverso da quasi tutti gli altri database. L'effetto è un cross join
. Allo stesso modo, puoi usare una on
clausola concross join
, che differisce anche da SQL standard.
Un cross join crea un prodotto cartesiano, ovvero ogni possibile combinazione di 1 riga dalla prima tabella e 1 riga dalla seconda. Il cross join per una tabella con tre righe ("a", "b" e "c") e una tabella con quattro righe (ad esempio 1, 2, 3, 4) avrebbe 12 righe.
In pratica, se vuoi fare un cross join, usa cross join
:
from A cross join B
è molto meglio di:
from A, B
e:
from A join B -- with no on clause
Il on
clausola è richiesta per un outer join destro o sinistro, quindi la discussione non è rilevante per loro.
Se hai bisogno di capire i diversi tipi di join, allora devi studiare sui database relazionali. Stackoverflow non è un luogo appropriato per quel livello di discussione.
Vedi qualche esempio in http://www.sitepoint.com/understanding-sql-joins-mysql-database/
Puoi utilizzare "USING" invece di "ON" come nella query
SELECT * FROM table1 LEFT JOIN table2 USING (id);
ON
clausola dice al server come sono correlate le tabelle, no. Se i tuoi diversi tipi di join danno tutti lo stesso risultato, stai sbagliando in qualche modo e l'aggiunta di codice potrebbe aiutarci a individuare il tuo problema. Nel frattempo, vai sul blog di Jeff Atwood per un'introduzione di 2 minuti ai diversi tipi di join.