我们有两个(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
。 (这样的外键是个好主意吗?)
我意识到我必须以某种方式使用最近的点运算符(##),但在编写查询时我有点迷失。
答案 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 );