繁体   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