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
Susan Sarandonoriginal
2025-01-13 06:43:43715parcourir

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>

À 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>

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!

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