gpt4 book ai didi

postgresql - 如何使用 ST_Intersects 在 postgis 中更新表格

转载 作者:行者123 更新时间:2023-11-29 12:33:02 25 4
gpt4 key购买 nike

我在 postgis 中有一张两张表。一个是 Bank,它是点,另一个是 IndiaState,它是多边形。这两个表都有一个名为 State 的列。对于 Bank 状态列为空且 IndiaState 表,状态列具有状态名称。我想使用 ST_Intersects 填充 Bank 表中的状态列。 我可以选择属于特定状态的银行积分

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)
);

关于postgresql - 如何使用 ST_Intersects 在 postgis 中更新表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32096394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com