Le mélange de JOIN et de virgules dans les requêtes MySQL provoque des erreurs
Description du problème
Lors de l'exécution de la requête MySQL suivante :
<code class="language-sql">SELECT m.*, t.* FROM memebers as m, telephone as t INNER JOIN memeberFunctions as mf ON m.id = mf.memeber INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber WHERE mf.function = 32</code>
rencontrera l'erreur suivante :
<code>#1054 - Unknown column 'm.id' in 'on clause'</code>
La requête échoue même si la colonne existe. Cette erreur se produit lorsque la syntaxe ANSI 1992 JOIN et les virgules sont utilisées ensemble dans une requête.
Solution
Selon la documentation MySQL, il faut éviter de mélanger des JOIN et des virgules. Pour résoudre ce problème, remplacez la virgule par l'opérateur JOIN approprié (CROSS, INNER, LEFT).
La requête mise à jour utilisant INNER JOIN est la suivante :
<code class="language-sql">SELECT m.*, t.* FROM memebers as m INNER JOIN telephone as t ON <join condition> INNER JOIN memeberFunctions as mf ON m.id = mf.memeber AND mf.function = 32 INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber</code>
Notez que la condition de jointure entre m
et t
doit être spécifiée pour éviter le produit cartésien.
Notes supplémentaires
Pour plus de clarté et d'efficacité, l'opérateur JOIN doit être utilisé à la place des virgules. La virgule indique un CROSS JOIN, ce qui peut provoquer un comportement inattendu, notamment lors de la combinaison de plusieurs tables. En utilisant des opérateurs JOIN explicites, vous pouvez définir des relations spécifiques entre les tables pour vous assurer d'obtenir les résultats souhaités.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!