最近(几何)点作为外键

时间:2013-05-29 23:18:20

标签: database postgresql

我们有两个(PostgreSQL 9.2)表。首先cities

 loc_id    | integer               | not null
 name      | character varying(40) | 
 gps_coord | point                 | 

后跟weather_stations

 s_id        | integer                | not null
 location    | character varying(255) | not null
 height      | integer                | 
 city_loc_id | integer                | 
 gps_coord   | point                  | 

使用他们的点坐标,我们如何找到最近的气象站城市?我想使用这个城市来填充weather_stations的外键(这些都是NULL那一刻),即city_loc_id。 (这样的外键是个好主意吗?)

我意识到我必须以某种方式使用最近的点运算符(##),但在编写查询时我有点迷失。

2 个答案:

答案 0 :(得分:2)

有一个距离算子可能正是您所寻找的:select point1 <-> point2。 (也有地球距离,但是你的目的似乎有点过分了。)

答案 1 :(得分:1)

我找到了解决方案。谢谢你的帮助。

UPDATE weather_stations
    SET city_loc_id = (
        SELECT c.loc_id
        FROM cities c
        ORDER BY weather_stations.gps_coord <-> c.gps_coord
        LIMIT 1 );