Postgresql
根據表 A 和 B 之間的最小距離從表 B 添加行
我是 PostgreSQL 的初學者,有兩個表 A 和 B,都有多個列,包括一個點列 (geom):
TableA 包括給定的“ID”、geom 等,TableB 是具有“名稱”列、geom 等的位置“DB”…
需要為每個 TableA.id 查找 TableB 中最近位置的“名稱”(行列)和距離是什麼。
已經可以計算 TableA 和 TableB 的所有點之間的距離:
ST_DistanceSpheroid(pointA,pointB,[SPHEROID])
但是到目前為止,最好的方法是選擇查詢,其中提供了
TAbleA.ID
TableB 中的每個所有距離和相應名稱 - 並沒有找到每個 ID 的最小值。雖然需要將新的計算列(距離和名稱)添加到表 A。
我尚不清楚在使用“選擇”與實際表數據輸出時如何處理數據輸出。或使用視圖。
這是最近鄰經典。基本解決方案:
SELECT * FROM tableA a CROSS JOIN LATERAL ( SELECT b.name, b.geom <-> a.geom AS dist FROM tableB b ORDER BY dist LIMIT 1 ) b;
確保在 上有一個空間GiST 索引
tableB(geom)
:CREATE INDEX b_geom_gist_idx ON tableB USING GIST (geom);
有關的:
推薦閱讀:
關於
LATERAL
加盟: