2013-05-09 19 views
57

È possibile scrivere query di join senza la dichiarazione ON? e come funzionano questi due join LEFT JOIN, RIGHT JOIN.Come usare mysql JOIN senza ON condizione?

+0

Poiché la clausola 'ON' indica al server come sono correlate le tabelle, n. Se i diversi tipi di join danno lo stesso risultato, in qualche modo lo stai facendo in modo sbagliato e aggiungere del codice potrebbe aiutarci a individuare il tuo problema. Nel frattempo, vai al [blog di Jeff Atwood] (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html) per una introduzione di 2 minuti al diversi tipi di join. – fvu

risposta

84

MySQL documentation copre questo argomento.

Ecco una sinossi. Quando si utilizza join o inner join, la condizione on è facoltativa. Questo è diverso dallo standard ANSI e diverso da quasi tutti gli altri database. L'effetto è un cross join. Allo stesso modo, è possibile utilizzare una clausola on con cross join, che differisce anche dallo standard SQL.

Un cross join crea un prodotto cartesiano, ovvero ogni combinazione possibile di 1 riga dalla prima tabella e 1 riga dalla seconda. Il cross join per un tavolo 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 si vuole fare un cross join, quindi utilizzare cross join:

from A cross join B 

è molto meglio di:

from A, B 

e:

from A join B -- with no on clause 

Il on è necessaria una clausola per un join esterno destro o sinistro, quindi la discussione non è rilevante per loro.

Se è necessario comprendere i diversi tipi di join, è necessario eseguire alcuni studi sui database relazionali. Stackoverflow non è un luogo appropriato per quel livello di discussione.