[英]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 表中的所有行。 请帮忙。
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.