Postgresql

根據表 A 和 B 之間的最小距離從表 B 添加行

  • August 13, 2022

我是 PostgreSQL 的初學者,有兩個表 A 和 B,都有多個列,包括一個點列 (geom):

TableA 包括給定的“ID”、geom 等,TableB 是具有“名稱”列、geom 等的位置“DB”…

需要為每個 TableA.id 查找 TableB 中最近位置的“名稱”(行列)和距離是什麼。

已經可以計算 TableA 和 TableB 的所有點之間的距離:

ST_DistanceSpheroid(pointA,pointB,[SPHEROID])

但是到目前為止,最好的方法是選擇查詢,其中提供了TAbleA.IDTableB 中的每個所有距離和相應名稱 - 並沒有找到每個 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加盟:

引用自:https://dba.stackexchange.com/questions/315583