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
useORDER 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
不完全正确。。。见多班的评论。不完全正确。。。见多班的评论。