我很快就会问为什么我不能在距离上使用关键字?我需要以某种方式检查距离<例如20
SELECT
Id, Lat, Lng,
(6367 * acos( cos( radians(45.444) )
* cos( radians( Lat ) ) * cos( radians( Lng ) - radians(158.554) )
+ sin( radians(4545) ) * sin( radians( Lat ) ) ) ) AS distance
FROM
Posts
HAVING
distance < 15 // Invalid column Name
ORDER BY
distance
答案 0 :(得分:2)
试试这个
SELECT *
FROM
(SELECT
Id, Lat, Lng,
(6367 * acos(cos(radians(45.444)) * cos(radians(Lat)) *
cos(radians(Lng) - radians(158.554)) + sin(radians(4545)) *
sin(radians(Lat)))) AS distance
FROM Posts) p
WHERE
p.distance < 15
ORDER BY
p.distance
答案 1 :(得分:2)
我可能会为此目的建议http://localhost/myStream.isml/manifest
:
outer apply
使用SELECT p.Id, p.Lat, p.Lng, d.distance
FROM Posts p OUTER APPLY
(SELECT (6367 * acos( cos( radians(45.444) )
* cos( radians( p.Lat ) ) * cos( radians( p.Lng ) - radians(158.554) )
+ sin( radians(4545) ) * sin( radians( p.Lat ) ) ) ) AS distance
) d
FROM Posts p
WHERE d.distance < 15
ORDER BY distance;
代替HAVING
是MySQL的扩展。在其他数据库中,您可以使用子查询,CTE或横向连接(这是WHERE
所做的技术名称)。在这种情况下,我认为横向连接很方便,因为它将这个相当复杂的公式的逻辑分开。
答案 2 :(得分:-2)
你可以使用括号来表示你的意思是字段名称而不是一个pereserved关键字:
SELECT Id,Lat,Lng,(6367 * acos( cos( radians(45.444) )
* cos( radians( Lat ) ) * cos( radians( Lng ) - radians(158.554) )
+ sin( radians(4545) ) * sin( radians( Lat ) ) ) ) AS distance FROM Posts
HAVING [distance] < 15 // Invalid column Name
ORDER BY distance