Ошибка запроса при наличии предложения с использованием вычисляемого столбца - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь найти ближайшие местоположения на основе широты и долготы, используя местоположения в моей базе данных. Вот мой запрос:

select *,
acos(cos(33.7103820972222 * (PI()/180)) *
 cos(73.05794 * (PI()/180)) *
 cos(Lat * (PI()/180)) *
 cos(Lon * (PI()/180))
 +
 cos(33.7103820972222 * (PI()/180)) *
 sin(73.05794 * (PI()/180)) *
 cos(Lat * (PI()/180)) *
 sin(Lon * (PI()/180))
 +
 sin(33.7103820972222 * (PI()/180)) *
 sin(73.05794 * (PI()/180))
) * 3959 AS Dist from tblOrg having Dist < 5 order by Dist

У меня ошибка в Dist в строке ниже having Dist < 5.

Ответы [ 2 ]

2 голосов
/ 12 января 2020

Как прокомментировал marc_s "HAVING следует использовать только с условиями, которые включают агрегатную функцию, такую ​​как SUM, COUNT et c. В противном случае, если у вас нет агрегата в вашем условии, используйте WHERE вместо "

И вы не можете получить доступ к вычисляемому столбцу напрямую в предложении having или where. Поэтому вместо этого сделайте подзапрос:

select *
from (
  select *,
    acos(cos(33.7103820972222 * (PI()/180)) *
    cos(73.05794 * (PI()/180)) *
    cos(Lat * (PI()/180)) *
    cos(Lon * (PI()/180))
    +
    cos(33.7103820972222 * (PI()/180)) *
    sin(73.05794 * (PI()/180)) *
    cos(Lat * (PI()/180)) *
    sin(Lon * (PI()/180))
    +
    sin(33.7103820972222 * (PI()/180)) *
    sin(73.05794 * (PI()/180))
    ) * 3959 AS Dist
  from tblOrg
) x
where Dist < 5
order by Dist
0 голосов
/ 12 января 2020

Этот запрос окончательно решил мои проблемы.

    tblOrg.Id as Id,
    ( 6371  * acos( cos( radians(33.7103820972222) ) 
    * cos( radians( Lat  ) ) 
    * cos( radians( Lon  ) 
    - radians(73.05794) ) 
    + sin( radians(33.7103820972222) ) 
    * sin( radians( Lat ) ) ) ) AS Distance
FROM 
    tblOrg 
) AS P
WHERE
    P.Distance< 5   
ORDER BY
    P.Distance;
...