对于给定的项目,我使用以下表达式为来自两个字段(纬度,经度)中具有经度和纬度值的现场设备的新记录创建geom值:
UPDATE public.data_mds_import
SET geom=(
SELECT
st_force3d(st_setsrid(st_point(public.data_mds_import.longitude, public.data_mds_import.latitude),4326))
WHERE PUBLIC.data_mds_import.id_jobcode=220 /* ENTER ID_JOBCODE HERE */
);
我们有很多字段数据输入,我需要一个语句,我可以在该语句中为导入的每组新的字段数据更改语句中的作业代码值。
问题是,对于表中其他代码(作业代码!= 220),该函数返回空值,即,它删除了geom值,因此我丢失了几何数据,因此我从使用几何值之前的几千条记录开始函数运行,仅运行到jobcode ='220'的记录。
为什么会这样,该语句应该只选择jobcode = 220正确的记录?似乎选择了所有记录并返回了几何,其中jobcode = 220,对于其他每条记录为null。没有行动会比null更好。
我应该使用案例陈述吗?如果可以的话,请有人提供帮助,我已经尝试了几种case语句变体,但无法执行该语句。
如果要更新单个表,则无需使用suquery来简单地更新列。另外,您无需重复架构和表名。
此查询选择与id_jobcode = 220
对应的所有记录,并从geom
和latitude
的值在logitude
列中创建几何图形:
UPDATE public.data_mds_import
SET geom = ST_Force3D(
ST_SetSRID(
ST_Point(longitude, latitude),4326))
WHERE id_jobcode = 220;