Est-il possible d'écrire une requête de jointure sans ON
instruction? et comment fonctionnent ces jointures LEFT JOIN, RIGHT JOIN
.
Est-il possible d'écrire une requête de jointure sans ON
instruction? et comment fonctionnent ces jointures LEFT JOIN, RIGHT JOIN
.
Réponses:
La documentation MySQL couvre ce sujet.
Voici un synopsis. Lorsque vous utilisez join
ou inner join
, la on
condition est facultative. Ceci est différent de la norme ANSI et différent de presque toutes les autres bases de données. L'effet est un cross join
. De même, vous pouvez utiliser une on
clause with cross join
, qui diffère également du SQL standard.
Une jointure croisée crée un produit cartésien, c'est-à-dire toutes les combinaisons possibles d'une ligne de la première table et d'une ligne de la seconde. La jointure croisée pour une table avec trois lignes («a», «b» et «c») et une table avec quatre lignes (disons 1, 2, 3, 4) aurait 12 lignes.
En pratique, si vous souhaitez effectuer une jointure croisée, utilisez cross join
:
from A cross join B
est bien mieux que:
from A, B
et:
from A join B -- with no on clause
La on
clause est requise pour une jointure externe droite ou gauche, la discussion n'est donc pas pertinente pour eux.
Si vous avez besoin de comprendre les différents types de jointures, vous devez étudier les bases de données relationnelles. Stackoverflow n'est pas un endroit approprié pour ce niveau de discussion.
Voir quelques exemples sur http://www.sitepoint.com/understanding-sql-joins-mysql-database/
Vous pouvez utiliser "USING" au lieu de "ON" comme dans la requête
SELECT * FROM table1 LEFT JOIN table2 USING (id);
ON
clause indique au serveur comment les tables sont liées, non. Si vos différents types de jointures donnent tous le même résultat, vous le faites mal d'une manière ou d'une autre, et l'ajout de code pourrait nous aider à détecter votre problème. En attendant, rendez-vous sur le blog de Jeff Atwood pour une introduction de 2 minutes aux différents types de jointures.