È 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?
risposta
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.
vedere qualche esempio in http://www.sitepoint.com/understanding-sql-joins-mysql-database/
È possibile utilizzare 'utilizzando' invece di 'ON' come nella query
SELECT * FROM table1 LEFT JOIN table2 USING (id);
Per ulteriori chiarimenti, la colonna di collegamento in entrambe le tabelle deve avere lo stesso nome per USING to work – rmirabelle
Si potrebbe anche voler indagare l'uso di UNION, che combina più tabelle per una uscita: SQL - Combine two tables for one output
Come è anche rilevante per la domanda dell'OP? –
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