很抱歉提出这样一个基本问题(我确定它是重复的)但是我已经进行了广泛的搜索,我无法解决如何做我需要的问题。我可能只是在搜索错误的关键字。
我有一个空列的数据库表。我想在该列中为所有行插入一个值。
我的表格如下:
wkb_geometry | geometry(Polygon,4326) |
id | integer |
area | real |
我想将wkb_geometry
的区域插入所有行的区域列。
我知道如何计算和更新单个行,如下所示:
update inspire_parcel set area=(select st_area(wkb_geometry::geography)
from inspire_parcel where id=24045271) where id=24045271;
但是如何为所有行执行此操作?
如果它有所作为,我有很多行 - 超过2000万。
答案 0 :(得分:2)
不需要select,只需使用函数的结果更新列,并省略where子句来更新所有行:
update inspire_parcel
set area = st_area(wkb_geometry::geography);
要避免覆盖现有值,只需使用适当的WHERE子句:
update inspire_parcel
set area = st_area(wkb_geometry::geography)
where area is null;
如果您只想为一行执行此操作,这也是正确的方法:
update inspire_parcel
set area = st_area(wkb_geometry::geography)
where id = 24045271;