Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quelle est la différence entre utiliser et on dans les jointures de table dans MySQL ?

Je n'utilise pas la syntaxe USING, puisque

  1. la plupart de mes jointures ne lui conviennent pas (pas le même nom de champ qui correspond, et/ou plusieurs correspondances dans la jointure) et
  2. il n'est pas immédiatement évident de savoir ce que cela signifie dans le cas de plus de deux tables

c'est-à-dire en supposant 3 tables avec les colonnes 'id' et 'id_2', est-ce que

T1 JOIN T2 USING(id) JOIN T3 USING(id_2)

devenir

T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T1.id_2=T3.id_2 AND T2.id_2=T3.id_2)

ou

T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T2.id_2=T3.id_2)

ou encore autre chose ?

Trouver cela pour une version de base de données particulière est un exercice assez trivial, mais je n'ai pas une grande confiance dans sa cohérence dans toutes les bases de données, et je ne suis pas la seule personne qui doit maintenir mon code (donc le d'autres personnes devront également savoir à quoi cela équivaut).

Une différence évidente entre WHERE et ON est si la jointure est externe :

En supposant un T1 avec un seul champ ID, une ligne contenant la valeur 1, et un T2 avec un champ ID et VALUE (une ligne, ID=1, VALUE=6), alors nous obtenons :

SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42

ne donne aucune ligne, puisque WHERE doit correspondre, alors que

SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)

donnera une ligne avec les valeurs

1, NULL, NULL

puisque le ON n'est requis que pour faire correspondre la jointure, qui est facultative car externe.