De MySQL documentation page
Auparavant, l'opérateur virgule (,) et JOIN avaient tous deux la même priorité, si l'expression de jointure t1, t2 REJOIGNEZ t3 a été interprété comme ((t1, t2) REJOIGNEZ t3). Maintenant, JOIN a une priorité plus élevée, donc l'expression est interprétée comme (t1, (t2 JOIN t3)). Cette modification affecte les instructions qui utilisent une clause ON, car cette clause ne peut faire référence qu'aux colonnes des opérandes de la jointure et la modification de la priorité change l'interprétation de ces opérandes.
Exemple:
CREATE TABLE t1 (i1 INT, j1 INT);
CREATE TABLE t2 (i2 INT, j2 INT);
CREATE TABLE t3 (i3 INT, j3 INT);
SELECT * FROM t1, t2 JOIN t3 ON (t1.i1 = t3.i3);
Auparavant, le SELECT était légal en raison du regroupement implicite de t1, t2 comme (t1, t2). Maintenant, le JOIN a priorité, donc les opérandes pour la clause ON sont t2 et t3. Comme t1.i1 n'est pas une colonne dans l'un des opérandes, le résultat est une colonne Unknown 't1.i1' dans l'erreur 'on clause'. Pour permettre à la jointure à traiter, regrouper les deux premières tables explicitement entre parenthèses afin que les opérandes pour la clause ON sont (t1, t2) et t3:
SELECT * FROM (t1, t2) JOIN t3 ON (t1.i1 = t3.i3);
Vous pouvez également éviter l'utilisation de l'opérateur virgule et utiliser REJOIGNEZ à la place:
SELECT * FROM t1 JOIN t2 JOIN t3 ON (t1.i1 = t3.i3);
Cette modification s'applique également aux déclarations qui mélangent l'opérateur virgule avec INNER JOIN, CROSS JOIN, LEFT JOIN et RIGHT JOIN, qui ont tous maintenant une priorité plus élevée que l'opérateur virgule.
par des guillemets, voulez-vous dire entre parenthèses? Dans la première requête, je ne comprends pas votre explication. De quel article parlez-vous? Pouvez-vous reformuler? Merci – Neil