ON子句中的MySQL未知列
我有以下MySQL查询:
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, propertygeometry pg
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
AND p.PropertyGeometryID = pg.id
GROUP BY p.id
我收到此错误:
据我所知,查询看起来是正确的,知道发生什么了吗?
回答:
不要混合使用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等。如果在存在联接条件时将逗号联接与其他联接类型混合使用,则可能会出现 形式为“
的错误。本节稍后将提供有关解决此问题的信息。
我建议 始终 使用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标准?
以上是 ON子句中的MySQL未知列 的全部内容, 来源链接: utcz.com/qa/405523.html