Come usare mysql JOIN senza condizione ON?


106

È possibile scrivere query di join senza ON istruzione? e come funzionano questi join differiscono LEFT JOIN, RIGHT JOIN.


1
Poiché la ONclausola 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.
fvu

Risposte:


153

La documentazione di MySQL copre questo argomento.

Ecco una sinossi. Quando si utilizza joino inner join, la oncondizione è 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 onclausola 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.


1
Non ho mai sentito parlare di un cross join o ne avevo bisogno ... fino ad oggi!
goos

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.