首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从另一个表中获取值并将结果插入到另一个查询中

如何从另一个表中获取值并将结果插入到另一个查询中
EN

Stack Overflow用户
提问于 2019-11-27 23:08:10
回答 1查看 65关注 0票数 1

我正在尝试构建一个基本的sql查询,其中我在sql数据库中有一个加油站表和另一个POI表,并且我希望获得POI半径内的所有加油站

我有以下疑问:

代码语言:javascript
复制
        SELECT *, ( 6371000 * acos( cos( radians(15.4383252) )
 * cos( radians( petrol_stations.lat ) ) * cos( radians( petrol_stations.lng ) - radians(47.0450591) ) 
+ sin( radians(15.4383252) ) * sin(radians(petrol_stations.lat)) ) ) 
AS distance FROM petrol_stations HAVING distance < 500

它似乎工作得很好,但是我必须将POI的坐标硬编码到查询中。是否可以调整查询,以便从其他表中提取POI坐标(如果提供了名称,如main square

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-11-27 23:23:29

假设您有一个georef poi表为

代码语言:javascript
复制
  table_poi 

  id    name    lat           lng 
  1     my_poi  47.0450591 15.4383252 

您可以尝试交叉连接所有与您的所有petrol_stations相关的POI

代码语言:javascript
复制
  SELECT *
    , ( 6371000 * acos( cos( radians(table_poi.lng) )
      * cos( radians( petrol_stations.lat ) ) * cos( radians( petrol_stations.lng ) 
           - radians(table_poi.lat) ) 
      + sin( radians(table_poi.lng) ) * sin(radians(petrol_stations.lat)) ) ) 
  AS distance 
  FROM petrol_stations  
  CROSS JOIN table_poi 
  HAVING distance < 500

或使用where (根据MarlinPierce的要求)

代码语言:javascript
复制
  SELECT *
    , ( 6371000 * acos( cos( radians(table_poi.lng) )
      * cos( radians( petrol_stations.lat ) ) * cos( radians( petrol_stations.lng ) 
           - radians(table_poi.lat) ) 
      + sin( radians(table_poi.lng) ) * sin(radians(petrol_stations.lat)) ) ) 
  AS distance 
  FROM petrol_stations  
  CROSS JOIN table_poi 
  WHERE ( 6371000 * acos( cos( radians(table_poi.lng) )
      * cos( radians( petrol_stations.lat ) ) * cos( radians( petrol_stations.lng ) 
           - radians(table_poi.lat) ) 
      + sin( radians(table_poi.lng) ) * sin(radians(petrol_stations.lat)) ) ) < 500

如果要对POI名称进行筛选

代码语言:javascript
复制
  SELECT *
    , ( 6371000 * acos( cos( radians(table_poi.lng) )
      * cos( radians( petrol_stations.lat ) ) * cos( radians( petrol_stations.lng ) 
           - radians(table_poi.lat) ) 
      + sin( radians(table_poi.lng) ) * sin(radians(petrol_stations.lat)) ) ) 
  AS distance 
  FROM petrol_stations  
  WHERE table_poi.name like '%your_poi_name%'
  CROSS JOIN table_poi 
  HAVING distance < 500
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59073144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档