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