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

Quelqu'un peut-il expliquer pourquoi ne pas utiliser un SQL JOIN est une mauvaise pratique et une erreur?

Il est vrai que les deux formes de syntaxe devraient donner le même résultat et en interne MySQL les exécute toutes les deux exactement de la même manière. Les versions actuelles de la norme SQL prennent en charge les deux formes, bien que le style virgule ne soit pris en charge que pour des raisons de compatibilité descendante.

Il existe un cas où l'utilisation de la syntaxe de type virgule échoue, mais c'est exotique :

SELECT * FROM A, B JOIN C ON C.x = A.y;

Le JOIN L'opérateur a une priorité plus élevée que la virgule. Donc, comme la requête ci-dessus essaie d'évaluer C.x = A.y il ne sait même pas que A fait partie de la requête. Vous obtenez donc une erreur :

ERROR 1054 (42S22): Unknown column 'A.y' in 'on clause'

Le meilleur remède est d'utiliser le JOIN syntaxe cohérente au lieu de les mélanger.

De plus, vous ne pouvez pas créer de jointures externes avec la syntaxe de jointure par virgule. Oracle et Sybase/Microsoft ont chacun inventé leur propre syntaxe propriétaire pour gérer les jointures externes, mais aucun n'est pris en charge par d'autres marques de RDBMS. Aujourd'hui, toutes les versions actuelles de RDBMS, y compris Oracle et Sybase/Microsoft, prennent en charge le standard JOIN syntaxe, il n'y a donc aucune bonne raison d'utiliser les anciennes extensions spécifiques au fournisseur.