如何在mysql中运行子查询

一起

我正在尝试从查询中的另一个表运行子查询

我的查询如下:

SELECT *, (6371000 * acos(cos(radians(select point_oi.lng
                                     from point_oi
                                     where point_oi.name like '%Main Square%')
                            ) 
* cos(radians(restaurants.lat)) * cos(radians(restaurants.lng) 
- radians(select point_oi.lng
         from point_oi
         where point_oi.name like '%Main Square%'
        )) 
+ sin(radians(select point_oi.lng
             from point_oi
             where point_oi.name like '%Main Square%'))
* sin(radians(restaurants.lat)))) AS distance
FROM restaurants
HAVING distance < 500;

当我运行查询时,我收到一条错误消息,提示附近存在错误select我想使用嵌套的选择查询从另一个表中获取经纬度,而不是对值进行硬编码。我怎样才能解决这个问题。

感谢您的帮助

scaisEdge

如果suquery返回的行多于有错误的行,则不应使用子查询来获取point_poi lat,lnt。

尝试使用适当的联接(在这种情况下,您可以使用point_poi和可以使用交叉联接的餐厅之间没有关系的fatc)

  SELECT restaurants.*, 
    (6371000 * acos(cos(radians(point_oi.lng )) 
  * cos(radians(restaurants.lat)) * cos(radians(restaurants.lng) 
  - radians(point_oi.lng )) 
  + sin(radians(point_oi.lng ))
  * sin(radians(restaurants.lat)))) AS distance
  FROM restaurants
  CROSS JOIN point_oi 
  WHERE   point_oi.name like '%Main Square%'
  AND (6371000 * acos(cos(radians(point_oi.lng )) 
  * cos(radians(restaurants.lat)) * cos(radians(restaurants.lng) 
  - radians(point_oi.lng )) 
  + sin(radians(point_oi.lng ))
  * sin(radians(restaurants.lat)))) < 500;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章