Maison >base de données >tutoriel mysql >Pourquoi le mélange de JOIN et de virgules dans les requêtes MySQL provoque-t-il des erreurs « Colonne inconnue » ?

Pourquoi le mélange de JOIN et de virgules dans les requêtes MySQL provoque-t-il des erreurs « Colonne inconnue » ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-09 10:46:49421parcourir

Why Does Mixing JOINs and Commas in MySQL Queries Cause

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn