这可能是也可能不是一个简单的问题。
我有一个查询,它选择围绕提供的纬度和经度在一英里范围内的所有位置。那部分工作得很好,但是我想在另一个表中添加其他信息,我希望与之匹配。我已经尝试过LEFT JOIN,但它已经超时了。
SELECT *,
( 3959 * acos( cos( radians(40.7143528) ) * cos( radians( lat ) )
* cos( radians( lon ) - radians(-74.0059731) ) + sin( radians(40.7143528) )
* sin( radians( lat ) ) ) ) AS distance
FROM locations
LEFT JOIN informations ON
locations.name = informations.name
HAVING distance < 1
以下是我希望此查询执行的操作:
以上查询似乎想要工作。我没有收到任何错误,它在any MySQL formatter I use中显示为有效。但是,我认为我在某个地方犯了一个错误,导致我的小服务器最大化处理器使用率。
对于更有经验的一组眼睛,您会看到出现这种情况的原因吗?除了我的服务器几乎无用之外,我知道。
答案 0 :(得分:0)
使您的初始查询成为主查询的子查询,并将结果关系与新表连接(附加信息)。这应该会让你回归
结果如下:
SELECT *
FROM(
SELECT *,
( 3959 * acos( cos( radians(40.7143528) ) * cos( radians( lat ) )
* cos( radians( lon ) - radians(-74.0059731) ) + sin( radians(40.7143528) )
* sin( radians( lat ) ) ) ) AS distance
FROM locations
) locations
LEFT JOIN informations
ON location.name =informations.name
HAVING子句当然是查询#1的一部分。
我通常使用SQL SERVER,因此语法可能不适合MYSQL。