Maison > base de données > tutoriel mysql > Pourquoi MySQL lance-t-il « Colonne inconnue dans la clause ON » lors du mélange des styles de jointure ?

Pourquoi MySQL lance-t-il « Colonne inconnue dans la clause ON » lors du mélange des styles de jointure ?

Susan Sarandon
Libérer: 2025-01-13 06:43:43
original
718 Les gens l'ont consulté

Why Does MySQL Throw

Erreur MySQL « Colonne inconnue dans la clause ON » : explication détaillée de la confusion dans l'ordre de connexion

Lorsque vous rencontrez l'erreur "#1054 - Colonne inconnue 'p.id' dans 'on clause'" dans MySQL, la clé est de comprendre les problèmes potentiels liés au mélange des jointures de style ANSI-89 et ANSI-92 dans la requête. Par défaut, MySQL évalue les connexions en fonction de leur priorité, ce qui peut prêter à confusion si l'ordre des connexions n'est pas explicitement spécifié.

Dans une requête incorrecte, MySQL interprétera la requête comme suit, où les jointures de style virgule sont évaluées après la jointure du mot-clé JOIN :

<code class="language-sql">FROM property p, (
    propertygeometry pg
    JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
    ...
)</code>
Copier après la connexion

À ce stade, MySQL pense que la table "p" n'a pas été déclarée, provoquant une erreur "colonne inconnue".

Pour éviter cette confusion, il est recommandé de toujours utiliser des jointures de style ANSI-92 tout au long de la requête, c'est-à-dire en utilisant le mot-clé JOIN :

<code class="language-sql">SELECT p.*,
    IF(COUNT(ms.PropertyID) > 0,1,0) AS Contacted,
    pm.MediaID,
    date_format(p.AvailableFrom, '%d %b %Y') AS 'AvailableFrom',
    astext(pg.Geometry) AS Geometry
FROM property p
    JOIN propertygeometry pg ON p.PropertyGeometryID = pg.id
    JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
    LEFT JOIN message ms ON ms.PropertyID = p.id AND ms.SenderID = 384216
    LEFT JOIN property_media pm ON pm.PropertyID = p.id AND pm.IsPrimary = 1
WHERE p.paused = 0
GROUP BY p.id</code>
Copier après la connexion

Avec cette approche, la séquence de connexion est claire, évitant ainsi les messages d'erreur déroutants.

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