Maison > base de données > tutoriel mysql > Pourquoi le mélange de JOINURES ANSI et de tables séparées par des virgules dans MySQL entraîne-t-il des erreurs de « colonne inconnue » ?

Pourquoi le mélange de JOINURES ANSI et de tables séparées par des virgules dans MySQL entraîne-t-il des erreurs de « colonne inconnue » ?

Linda Hamilton
Libérer: 2025-01-09 10:57:41
original
534 Les gens l'ont consulté

Why Does Mixing ANSI JOINs and Comma-Separated Tables in MySQL Lead to

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal