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!