use*_*120 1 postgresql postgis
我在postgis中有一两个桌子。一个是Bank(即点),另一个是IndiaState(是多边形)。这两个表都有一个名为State的列。对于Bank state列为空,而IndiaState表中的state列具有州名。我想使用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'
Run Code Online (Sandbox Code Playgroud)
上面的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
Run Code Online (Sandbox Code Playgroud)
它正在更新Bank表中的所有行。请帮助。
UPDATE TN_Bank dst
SET "State" = 'KERALA'
FROM "IndiaState" src
WHERE ST_Intersects(src.geom, dst.geom)
AND src.state = 'KERALA'
;
Run Code Online (Sandbox Code Playgroud)
由于您没有在源表中使用任何字段(并且多于一行可以满足intersects()),因此可以将src表移至exist()检查:
UPDATE TN_Bank dst
SET "State" = 'KERALA'
WHERE EXISTS (
SELECT *
FROM "IndiaState" src
WHERE src.state = 'KERALA'
AND ST_Intersects(src.geom, dst.geom)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2716 次 |
| 最近记录: |