MySQL“未知列”错误:了解连接语法冲突
MySQL 的“‘on 子句’中的未知列‘p.id’”错误通常是由于连接语法的使用不一致而引起的。 这种歧义源于 ANSI-89 和 ANSI-92 连接样式之间的差异。
ANSI-89 使用逗号来定义连接,而 ANSI-92 使用显式 JOIN
关键字。 混合这些样式会导致解析错误。 原始查询错误地组合了两者,导致 MySQL 首先解释 ANSI-92 连接。 因此,在连接条件的 ANSI-89 部分中引用表“p”时,无法识别。
解决方案是保持一致性。 始终使用 ANSI-92 语法消除了优先级问题并提高了查询可读性。
这是使用一致的 ANSI-92 语法的更正查询:
<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>
这种方法通过避免语法冲突来确保查询的顺利执行。 为了清晰起见并防止错误,请始终使用显式的 JOIN
关键字。
以上是为什么 MySQL 在混合连接语法时会抛出'ON 子句中的未知列”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!