如何使用 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)
);
我在 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)
);