Maison >base de données >tutoriel mysql >Pourquoi MySQL génère-t-il une erreur « Colonne inconnue dans la clause ON » lors du mélange des syntaxes de jointure ?
Erreur MySQL « Colonne inconnue » : compréhension des conflits de syntaxe de jointure
L'erreur MySQL "Colonne inconnue 'p.id' dans 'on clause'" résulte souvent d'une utilisation incohérente de la syntaxe de jointure. Cette ambiguïté provient des différences entre les styles de jointure ANSI-89 et ANSI-92.
ANSI-89 utilise des virgules pour définir les jointures, tandis que ANSI-92 utilise le mot-clé explicite JOIN
. Le mélange de ces styles conduit à des erreurs d’analyse. La requête d'origine combinait incorrectement les deux, ce qui obligeait MySQL à interpréter en premier les jointures ANSI-92. Par conséquent, la table "p" n'a pas été reconnue lorsqu'elle est référencée dans la partie ANSI-89 de la condition de jointure.
La solution est de maintenir la cohérence. L'utilisation de la syntaxe ANSI-92 élimine les problèmes de priorité et améliore la lisibilité des requêtes.
Voici la requête corrigée utilisant une syntaxe ANSI-92 cohérente :
<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>
Cette approche garantit une exécution fluide des requêtes en évitant les conflits de syntaxe. Utilisez toujours le mot-clé explicite JOIN
pour plus de clarté et pour éviter les erreurs.
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!