使用数据库函数进行SQL查询

时间:2012-04-05 21:29:46

标签: database postgresql gps plpgsql

我有DataBase函数,按坐标计算距离

CREATE OR REPLACE FUNCTION distance(lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT) RETURNS FLOAT AS $$
DECLARE                                                   
    x float = 69.1 * (lat2 - lat1);                           
    y float = 69.1 * (lon2 - lon1) * cos(lat1 / 57.3);        
BEGIN                                                     
    RETURN sqrt(x * x + y * y);                               
END  
$$ LANGUAGE plpgsql;

现在我有2个表(一对一的关系),一个名为

带有列的

- > Personid,姓名,姓氏

和一个

位置列 - > PERSONID,纬度,经度。

现在我尝试使用distnace函数让距离小于5的人

我从以下查询开始,首先获取id

select loc.id,loc.latitude,loc.longitude from location loc
where distance(123,456,loc.latitude,loc.longitude)<0.5

但不知道如何从上述查询中获取所有具有id的人。

我该怎么做? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

这是你在找什么?

select p.*, loc.id,loc.latitude,loc.longitude 
from location loc inner join person p on (p.Personid=loc.Personid)
where distance(123,456,loc.latitude,loc.longitude)<0.5