Maison >base de données >tutoriel mysql >Pourquoi le mélange de jointures ANSI 1992 et de virgules dans les requêtes MySQL provoque-t-il des erreurs ?

Pourquoi le mélange de jointures ANSI 1992 et de virgules dans les requêtes MySQL provoque-t-il des erreurs ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-09 10:51:42610parcourir

Why Does Mixing ANSI 1992 Joins and Commas in MySQL Queries Cause Errors?

La raison pour laquelle l'utilisation mixte de la syntaxe ANSI 1992 JOIN et des virgules dans les requêtes MySQL provoque des erreurs

Lorsque vous joignez plusieurs tables dans une requête MySQL, veillez à utiliser systématiquement la syntaxe ANSI 1992 JOIN ou la notation séparée par des virgules. Le mélange de ces deux méthodes peut entraîner des erreurs telles que l'erreur « Colonne inconnue 'm.id' dans 'on clause'".

Raison de l'erreur

Dans 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 tente d'utiliser un mélange de notation virgule (utilisée pour joindre m et t) et de syntaxe ANSI 1992 JOIN (utilisée pour joindre mf et mt). Selon la documentation MySQL, cette méthode n'est plus prise en charge. L'opérateur virgule a désormais une priorité inférieure à celle de JOIN, provoquant des erreurs d'interprétation des opérandes.

Solution

Pour résoudre ce problème, utilisez systématiquement la notation par virgule ou la syntaxe ANSI 1992 JOIN. Pour plus de clarté et de fiabilité, il est recommandé d'utiliser la syntaxe JOIN :

<code class="language-sql">SELECT m.*, t.*
FROM memebers AS m
JOIN telephone AS t ON m.id = t.id
JOIN memeberFunctions AS mf ON m.id = mf.memeber AND mf.function = 32
JOIN mitgliedTelephone AS mt ON m.id = mt.memeber</code>

Remarques

  • Notez que la requête ci-dessus effectue un produit cartésien entre m et t, ce qui peut donner lieu à de très grands ensembles de données. Assurez-vous d'inclure les filtres appropriés dans votre requête.
  • Si vous utilisez la notation par virgule, assurez-vous de spécifier le type de jointure souhaité (par exemple, JOIN, LEFT JOIN, RIGHT JOIN). Sinon, la valeur par défaut est une connexion interne, qui peut ne pas être le type de connexion souhaité dans certains cas.

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