首页 >数据库 >mysql教程 >为什么 MySQL 在混合连接语法时会抛出'ON 子句中的未知列”错误?

为什么 MySQL 在混合连接语法时会抛出'ON 子句中的未知列”错误?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-13 06:48:42886浏览

Why Does MySQL Throw an

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn