mysql on 子句_sql-ON子句中的MySQL未知列

博客讨论了在SQL查询中不建议混合使用ANSI-89(逗号分隔的连接)和ANSI-92(JOIN关键字)样式的问题。这种混合可能导致解析错误,因为JOIN的优先级高于逗号连接。建议始终使用ANSI-92风格以避免混淆,并提供了修正后的查询示例。文章还提及了MySQL手册中的相关提示,强调了解决此类问题的重要性。
摘要由CSDN通过智能技术生成

不要混合使用ANSI-89样式和ANSI-92样式的连接。 它们具有不同的优先级,这可能导致混乱的错误,这就是这里发生的情况。 您的查询的解释如下:

FROM property p, (

propertygeometry pg

JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216

...

)

在上面的示例中,在甚至考虑了逗号样式的连接之前,首先评估使用JOIN关键字的连接。 此时,尚未声明表p。

从MySQL手册:

但是,逗号运算符的优先级小于INNER JOIN,CROSS JOIN,LEFT JOIN等。 如果在存在联接条件时将逗号联接与其他联接类型混合使用,则可能会出现“ on子句”中形式为“未知列” col_name”的错误。 本节稍后将提供有关解决此问题的信息。

我建议始终使用ANSI-92样式的连接,即使用JOIN关键字:

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

有关:

为什么没有比ANSI-89更好地采用SQL ANSI-92标准?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值