首页 > 解决方案 > PostGIS st_point 函数为所有不符合条件的记录返回空值

问题描述

我正在尝试为来自使用以下表达式的给定项目的两个字段(纬度、经度)中具有纬度和经度值的现场设备的新记录创建 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 的其他作业,该函数返回空值,即它删除了几何值,我丢失了我的几何数据,所以我在函数运行之前有几千条带有几何值的记录, 仅适用于 jobcode = '220' 的记录。

为什么会发生这种情况,该语句应该只选择 jobcode=220 的记录对吗?而它似乎选择了所有记录并返回 jobcode = 220 的几何图形,并且对于所有其他记录返回 null。没有任何动作会比 null 更好。

我应该使用案例陈述吗?如果是这样,有人可以帮助这样的陈述,我已经尝试了几种案例陈述变体并且无法执行陈述。

标签: sqlpostgresqlpostgis

解决方案


欢迎来到 SO。

如果您要更新单个表,则无需使用 suquery 来简单地更新列。此外,您不需要重复模式和表名。

此查询从 和 的值中选择与该列对应id_jobcode = 220并在该列中创建一个几何图形的所有记录:geomlatitudelogitude

UPDATE public.data_mds_import
SET geom = ST_Force3D(
             ST_SetSRID(
               ST_Point(longitude, latitude),4326))
WHERE id_jobcode = 220;

推荐阅读