SQL-无效的列名

SQL-无效的列名,sql,sql-server,Sql,Sql Server,我有以下疑问: 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 当我通过v.outcode添加部分GROUP

我有以下疑问:

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
当我通过v.outcode添加部分
GROUP时,它停止了工作。outcode的总和(距离)>100

它说服务器无法处理请求。-->无效的列名“距离”


知道为什么吗?

distance
是一个列别名,不能在
HAVING
子句中引用列别名。但是您可以按的顺序使用别名

尝试更改为:

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

distance
是列别名,不能在
HAVING
子句中引用列别名。但是您可以按的顺序使用别名

尝试更改为:

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

使用
按6*o.lat排序
。您不能将该子句用作
ORDER BY

use
ORDER BY 6*o.lat
。您不能将该子句用作ORDER BY,我认为您需要使用SUM(6*o.lat),因为不是每个数据库服务器都可以在having子句中使用别名列(它与查询规划、解析等有关)。取决于您使用的数据库。

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

仅在查询中定义为“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
仅在查询中定义为“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

不完全正确。。。见多班的评论。不完全正确。。。见多班的评论。