Problèmes lors de l'utilisation de tables mixtes ANSI JOIN et séparées par des virgules dans les requêtes MySQL
Vous pouvez rencontrer une erreur « Colonne inconnue » lors du mélange de la syntaxe ANSI JOIN (INNER JOIN, CROSS JOIN, LEFT JOIN) et des références de table séparées par des virgules dans une requête MySQL. Cette erreur se produit car l'interprétation par MySQL de l'opérateur virgule dépend de sa position.
Question :
Considérez la requête 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>
Cette requête génère une erreur « Colonne inconnue 'm.id' dans 'on clause'".
Solution :
Pour résoudre cette erreur, évitez de mélanger la syntaxe ANSI JOIN avec des tableaux séparés par des virgules. Utilisez uniquement la syntaxe ANSI JOIN, comme indiqué dans la requête modifiée ci-dessous :
<code class="language-sql">SELECT m.*, t.* FROM memebers as m JOIN telephone as t ON 1=1 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>
Explication :
MySQL interprète désormais la requête comme :
<code class="language-sql">((memembers as m JOIN telephone as t ON 1=1) INNER JOIN memeberFunctions as mf ON m.id = mf.memeber) INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber</code>
Dans cette syntaxe, les opérandes de la clause JOIN sont clairement définis et la colonne "m.id" est correctement référencée dans la clause ON. ON 1=1
est ajouté pour garantir l'exactitude de l'opération JOIN
, car le mot-clé JOIN
nécessite la clause ON
.
Remarque :
Il est important de noter que l'utilisation de virgules pour séparer les tableaux n'est plus considérée comme une bonne pratique dans MySQL. Il est recommandé d'utiliser la syntaxe ANSI JOIN pour garantir la clarté et éviter les erreurs potentielles.
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!