繁体   English   中英

SQL-无效的列名

[英]SQL - invalid column name

我有以下查询:

SELECT o.outcode AS lead_postcode, v.outcode AS venue_postcode, 6 * o.lat AS distance 
FROM venue_postcodes v, uk_postcodes o 
WHERE o.outcode = 'CF3' 
GROUP BY v.outcode 
HAVING SUM(distance)>100 
ORDER BY distance

当我添加零件GROUP BY v.outcode HAVING SUM(distance)>100时,此操作停止工作

它说服务器无法处理请求。 --->无效的列名'distance'

有什么想法吗?

distance是列别名,您不能在HAVING子句中引用列别名。 但是您可以在ORDER BY使用别名。

尝试更改为:

HAVING SUM(6 * o.lat)>100 
ORDER BY distance

仅在查询中仅定义为“ 6 * o.lat”的“别名”距离尚未在查询中使用,只能在之后使用。

替代解决方案是

SELECT i.*
FROM (
  SELECT o.outcode AS lead_postcode, v.outcode AS venue_postcode, 6 * o.lat AS distance 
  FROM venue_postcodes v, uk_postcodes o 
  WHERE o.outcode = 'CF3' 
) i
GROUP BY i.outcode 
HAVING SUM(i.distance)>100 ORDER BY i.distance

使用ORDER BY 6 * o.lat 您不能将AS子句用于ORDER BY

我相信您需要使用SUM(6 * o.lat),因为不是每个数据库服务器都可以在Haves子句中使用别名列(这与查询计划,解析等有关)。 取决于您使用的数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM