将第一个sql语句结果用于另一个sql语句

时间:2016-10-09 12:08:22

标签: mysql sql phpmyadmin mysql-workbench

基本上我想做的是从roadData中选择所有坐标 一个接一个,然后在20 {20}内找到tweetMelbourne中的所有点 它的里程数并将这些点插入另一个表格。

因此(x,y)表中的每个roadData都可以找到相邻的数据点 tweetMelbourne并将这些点插入另一个新表中。

所以我必须这样做:

SELECT geo_coordinates_latitude, geo_coordinates_longitude
 FROM tweetmelbourne
 HAVING  ( 3959 * acos( cos( radians(latitude) ) * cos( radians( geo_coordinates_latitude ) ) * 
 cos( radians( geo_coordinates_longitude ) - radians(longitude) ) + sin( radians(latitude) ) *
 sin( radians( geo_coordinates_latitude ) ) ) ) < .1 ORDER BY distance LIMIT 0 , 20; 

其中我必须从另一个表中获取纬度和经度的值:

select longitude,latitude from roadData;

描述tweetmelbourne;

enter image description here

描述roadData;

enter image description here

SELECT geo_coordinates_latitude, geo_coordinates_longitude
FROM tweetmelbourne;

enter image description here

select longitude,latitude from roadData;

enter image description here

3 个答案:

答案 0 :(得分:0)

具有多个参数的IN()的正确语法是:(Val1,Val2) IN(SELECT VAL1,val2..

SELECT t.address,(t.x+t.y) as z 
FROM student t
WHERE (t.x,t.y) IN(SELECT x,y FROM tweet)

也可以通过加入来完成:

SELECT t.address,(t.x+t.y) as z 
FROM student t
JOIN tweet s
 ON(t.x = s.x and t.y = s.y)

编辑:我认为你想要的是:

SELECT s.address,t.x+t.y as z
FROM student s
CROSS JOIN tweet t

答案 1 :(得分:0)

试试这个:

SELECT s.address, (t.x + t.y) as z
from (SELECT id,x,y FROM `tweet`) as t, student s
WHERE t.id = s.id;

答案 2 :(得分:0)

您需要加入这两个表,计算ON子句中的距离以选择附近的行。

SELECT *
FROM tweetmelbourne
JOIN roadData
ON ( 3959 * acos( cos( radians(latitude) ) * cos( radians( geo_coordinates_latitude ) ) * 
    cos( radians( geo_coordinates_longitude ) - radians(longitude) ) + sin( radians(latitude) ) *
    sin( radians( geo_coordinates_latitude ) ) ) ) < .1

如果表格很大,这将非常慢。使用索引来实现连接是不可能的,因此必须在每对行上执行复杂的公式。您可能希望查看MySQL的Spatial Data扩展名。