簡體   English   中英

如何使用 ST_Intersects 更新 postgis 中的表

[英]How to update a table in postgis using ST_Intersects

我在 postgis 中有一張兩張桌子。 一個是點狀的 Bank,另一個是多邊形的 IndiaState。 這兩個表都有一個名為 State 的列。 對於 Bank state 列是空的,而 IndiaState 表中的 state 列有州名。 我想使用 ST_Intersects 填充 Bank 表中的 state 列。 我可以選擇屬於特定狀態的銀行積分

select ST_Intersection("IndiaState".geom, TN_Bank.geom) as inter
"Bank_Name", "Lat"
from "IndiaState" INNER JOIN TN_Bank ON ST_Intersects("IndiaState".geom, TN_Bank.geom)
where "IndiaState".state='KERALA'

上面的 sql 返回 66 行,這是正確的。

但是更新命令不能正常工作

update TN_Bank set "State"='KERALA' from 
(select ST_Intersection("IndiaState".geom, TN_Bank.geom) as inter
"Bank_Name", "Lat"
from "IndiaState" INNER JOIN TN_Bank ON ST_Intersects("IndiaState".geom, TN_Bank.geom)
where "IndiaState".state='KERALA')x

它正在更新 Bank 表中的所有行。 請幫忙。

  • 您不必在 FROM 子句中指定目標表,它已經在范圍表中
  • 您需要將目標表鏈接/關聯到源表,我將您的 ON() 子句移至 WHERE 子句

UPDATE TN_Bank dst
SET "State" = 'KERALA' 
FROM "IndiaState" src
WHERE ST_Intersects(src.geom, dst.geom)
  AND src.state = 'KERALA'
        ;

由於您沒有使用源表中的任何字段(並且不止一行可以滿足 intersects()),您可以將 src 表移動到 exists() 檢查:


UPDATE TN_Bank dst
SET "State" = 'KERALA'
WHERE EXISTS (
        SELECT *
        FROM "IndiaState" src
        WHERE src.state = 'KERALA'
          AND ST_Intersects(src.geom, dst.geom)
        );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM