È 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? –
- 1. mysql delete on join?
- 2. MySql. Come usare Self Join
- 3. linq join con condizione condizione
- 4. Posso usare l'istruzione CASE in una condizione JOIN?
- 5. Yii2 condizione di join viaTable
- 6. Quando usare LEFT JOIN e quando usare INNER JOIN?
- 7. mysql join query utilizzando come?
- 8. MySQL Slow on join. Qualsiasi modo per accelerare
- 9. MySQL INNER JOIN Alias
- 10. SQL JOIN dove posizionare la condizione WHERE?
- 11. Left Join in Mysql?
- 12. AGGIORNAMENTO MySQL utilizzando la condizione IF
- 13. Sinistra join ON condizione E altra sintassi delle condizioni in Doctrine
- 14. condizionale JOIN in MySQL
- 15. MySQL combinando record da due tabelle con join e senza
- 16. R join on like/grep condition
- 17. Contare con condizione if nella query mysql
- 18. MySQL Inner Join Aggiornamento
- 19. SQL LEFT JOIN (Unione multipla Condizione)
- 20. MySQL "o" Condizione
- 21. metodo join join() senza separatore
- 22. MySQL Left Join Subquery con *
- 23. LINQ Join On Between Clausola
- 24. Case Statement on INNER Join
- 25. R Data.Table Join on Conditionals
- 26. In SQL, Qual è la differenza una condizione ON dopo un join vs alla fine di più join
- 27. MySQL INNER JOIN - '=' vs 'like'
- 28. MySQL join su valore massimo
- 29. MYSQL - Elimina query con Join
- 30. Mysql left join e sum
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