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

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

Susan Sarandon
Susan Sarandon原创
2025-01-13 06:43:43715浏览

Why Does MySQL Throw

MySQL “Unknown Column in ON Clause” 错误:连接顺序混淆详解

在MySQL中遇到“#1054 - Unknown column 'p.id' in 'on clause'”错误时,关键在于理解查询中混合使用ANSI-89和ANSI-92风格连接的潜在问题。默认情况下,MySQL根据连接的优先级来评估连接,这在未明确指定连接顺序的情况下可能导致混淆。

错误的查询中,MySQL会按照以下方式解释查询,其中逗号风格的连接在JOIN关键字连接之后进行评估:

<code class="language-sql">FROM property p, (
    propertygeometry pg
    JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
    ...
)</code>

此时,MySQL认为表“p”尚未声明,从而导致“未知列”错误。

为了避免这种混淆,建议在整个查询中始终使用ANSI-92风格的连接,即使用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>

通过这种方法,连接顺序清晰明了,从而避免了令人困惑的错误信息。

以上是为什么 MySQL 在混合连接样式时会抛出'ON 子句中的未知列”?的详细内容。更多信息请关注PHP中文网其他相关文章!

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