LEFT JOIN查询的处理器问题

时间:2013-04-26 22:56:03

标签: mysql left-join

这可能是也可能不是一个简单的问题。

我有一个查询,它选择围绕提供的纬度和经度在一英里范围内的所有位置。那部分工作得很好,但是我想在另一个表中添加其他信息,我希望与之匹配。我已经尝试过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

以下是我希望此查询执行的操作:

  1. 提供一英里范围内的所有匹配位置(正常工作)
  2. 获取这些商店的名称(作品)
  3. 将这些名称与“信息”表中的每个商店的名称相匹配
  4. 将匹配行中的所有信息加在一起,其中“locations.name”和“informations.name”匹配
  5. 以上查询似乎想要工作。我没有收到任何错误,它在any MySQL formatter I use中显示为有效。但是,我认为我在某个地方犯了一个错误,导致我的小服务器最大化处理器使用率。

    对于更有经验的一组眼睛,您会看到出现这种情况的原因吗?除了我的服务器几乎无用之外,我知道。

1 个答案:

答案 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。