SQL Having子句的问题

SQL Having子句的问题,sql,Sql,当我尝试执行下面的sql时,会收到一条错误消息,该消息表示列名距离无效。我还没有在我的sql中发布这么多,所以我不确定它的用途是什么。提前感谢您的帮助 SELECT ID, 3959 * ACOS(COS(RADIANS(34.743305)) * COS(RADIANS(Lattitude)) * COS(RADIANS(Longitude) - RADIANS(- 85.059586)) + SIN(RADIANS(34.743305)) * SIN(RADIA

当我尝试执行下面的sql时,会收到一条错误消息,该消息表示列名距离无效。我还没有在我的sql中发布这么多,所以我不确定它的用途是什么。提前感谢您的帮助

SELECT ID, 
  3959 * ACOS(COS(RADIANS(34.743305)) 
     * COS(RADIANS(Lattitude)) * COS(RADIANS(Longitude) - RADIANS(- 85.059586)) 
     + SIN(RADIANS(34.743305)) * SIN(RADIANS(Lattitude))) AS distance
FROM RetailerRegistration
HAVING (distance < 25)

您没有通过..使用任何组尝试这样做:

SELECT ID, 3959 * ACOS(COS(RADIANS(34.743305)) * COS(RADIANS(Lattitude)) * COS(RADIANS(Longitude) - RADIANS(- 85.059586)) + SIN(RADIANS(34.743305)) * SIN(RADIANS(Lattitude))) AS distance FROM RetailerRegistration where (distance < 25)
Having子句用于对一组行而不是单个行施加条件

希望这对……有所帮助。

having与group by结合使用。我想你把它和。。。另外,尝试将公式放入where子句,而不是引用别名

SELECT ID, 
  3959 * ACOS(COS(RADIANS(34.743305)) 
     * COS(RADIANS(Lattitude)) * COS(RADIANS(Longitude) - RADIANS(- 85.059586)) 
     + SIN(RADIANS(34.743305)) * SIN(RADIANS(Lattitude))) AS distance
FROM RetailerRegistration
WHERE
  3959 * ACOS(COS(RADIANS(34.743305)) 
     * COS(RADIANS(Lattitude)) * COS(RADIANS(Longitude) - RADIANS(- 85.059586)) 
     + SIN(RADIANS(34.743305)) * SIN(RADIANS(Lattitude))) < 25

问题是您试图引用在选择列表中创建的别名,我建议使用子查询,然后使用别名:

select ID, distance
from
(
  SELECT ID, 
    3959 * ACOS(COS(RADIANS(34.743305)) 
       * COS(RADIANS(Lattitude)) * COS(RADIANS(Longitude) - RADIANS(- 85.059586)) 
       + SIN(RADIANS(34.743305)) * SIN(RADIANS(Lattitude))) AS distance
  FROM RetailerRegistration
) d
where distance < 25;
处理查询的逻辑顺序为:

从…起 哪里 分组 有 选择 订购人
因此,尚未为WHERE子句定义别名距离。解决这个问题的一种方法是使用子查询

仍然在说where子句的列名距离无效。HAVING子句至少对MySQL中的单个行有效。对,SELECT列表的内容直到FROM、where、GROUP BY和HAVING子句执行之后才在逻辑上创建,所以它们的列别名还不存在,有时,列别名可用的上下文取决于DBMS。你的密码。您需要澄清什么是DBMS。PostgreSQL?神谕SQL Server?SQLlite?