首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL插入选择筛选字段

MYSQL插入选择筛选字段
EN

Stack Overflow用户
提问于 2015-05-19 08:46:41
回答 2查看 503关注 0票数 0

我必须在table1中为table2中的每一行插入一个新行。问题是,table2中的select返回的字段比插入所需的字段多,但是在select的where子句中很有用。

此查询根据其(商店)范围(在表商店中定义)向用户显示周围的所有商店。

代码语言:javascript
复制
SELECT destination.poi_id,
  6371 * 
     2 * 
     ASIN(
       SQRT(
         POWER(SIN((use_lat - poi_lat) * PI()/180 / 2), 2) +
         COS(use_lat * pi()/180) * 
         COS(poi_lat * pi()/180) *
         POWER(SIN((use_lon - poi_lon) * PI()/180 / 2), 2)
       )
     ) AS distance,
  destination.poi_range AS range
FROM stores destination, users origin
WHERE origin.use_id=userid
  AND destination.poi_lon BETWEEN lon1 AND lon2
  AND destination.poi_lat BETWEEN lat1 AND lat2
  HAVING distance <= range
ORDER BY distance;

现在,我必须将这些结果放在一个具有这种结构的表中。

代码语言:javascript
复制
user_id  INTEGER
poi_id   INTEGER
ins_date TIMESTAMP (CURRENT TIMESTAMP)

我不知道怎么做,你能帮我吗?

代码语言:javascript
复制
INSERT INTO table (user_id, poi_id)
SELECT ... ? (too many fields in select)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-19 08:53:26

在行之间读取一点,但基本上只包括插入IE中所需的列:

代码语言:javascript
复制
INSERT INTO table (user_id, poi_id)
SELECT use_id,poi_id,NOW() FROM
    (SELECT origin.use_id,destination.poi_id,6371 * 
     2 * 
     ASIN(
       SQRT(
         POWER(SIN((use_lat - poi_lat) * PI()/180 / 2), 2) +
         COS(use_lat * pi()/180) * 
         COS(poi_lat * pi()/180) *
         POWER(SIN((use_lon - poi_lon) * PI()/180 / 2), 2)
       )
     ) as distance
    FROM stores destination, users origin
    WHERE origin.use_id=userid
      AND destination.poi_lon BETWEEN lon1 AND lon2
      AND destination.poi_lat BETWEEN lat1 AND lat2
      HAVING distance <= range) sub1
ORDER BY distance;
票数 1
EN

Stack Overflow用户

发布于 2015-05-19 08:58:09

您只需要在select user_id中添加并删除距离和范围,因为您的表中没有,实际上您必须添加ins_date,因为您没有在插入中定义语句。所以你的选择应该是这样的

代码语言:javascript
复制
INSERT INTO table values (user_id, poi_id) 
   Select user_id, poi_id from FROM stores destination, users origin
WHERE origin.use_id=userid
  AND destination.poi_lon BETWEEN lon1 AND lon2
  AND destination.poi_lat BETWEEN lat1 AND lat2
  HAVING distance <= range
ORDER BY distance;

如果您需要在表中添加日期,请将此字段包括在括号中并也包括在select语句中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30320783

复制
相关文章

相似问题

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