如何使用 ST_Intersects 在 postgis 中更新 table

How to update a table in postgis using ST_Intersects

我在 postgis 中有一两个 table。一个是 Bank,它是点,另一个是 IndiaState,它是多边形。两个 table 都有一个名为 State 的列。对于 Bank state 列为空且 IndiaState table,state 列具有州名称。我想使用 ST_Intersects 填充 Bank table 中的状态列。 我能够 select 属于特定状态的银行积分

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 table 中的所有行。 请帮忙。

  • 您不必在 FROM 子句中指定目标 table,它已经在 table
  • 范围内
  • 你需要link/associate目标table到源table(s),我把你的ON()子句移到了WHERE子句

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

因为您没有使用源 table 中的任何字段(并且不止一行可以满足 intersects()),您可以将 src table 移动到 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)
        );