我在postgis中有两个表。一个是Bank,它是point,另一个是IndiaState,它是多边形。这两个表都有一个名为State的列。对于Bank状态列为空且IndiaState表状态列具有状态名称。我想使用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表中的所有行。 请帮助。
答案 0 :(得分:4)
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)
);