Sql PostGIS st_point function为所有不符合条件的记录返回空值

Sql PostGIS st_point function为所有不符合条件的记录返回空值,sql,postgresql,postgis,Sql,Postgresql,Postgis,我正在尝试为来自现场设备的新记录创建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_

我正在尝试为来自现场设备的新记录创建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 */

    );
我们有很多字段数据要输入,我需要一个语句,在这个语句中,我可以为导入的每一组新字段数据更改语句中的jobcode值

问题是,对于表中的其他作业,作业代码!=220,函数返回空值,即它删除几何值,我丢失了几何数据,因此在函数运行之前,我有数千条几何值记录,而只有jobcode='220'的记录

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

我应该使用案例陈述吗?如果有人能帮我写这样的语句,我已经尝试了几种case语句的变体,但无法执行语句。

欢迎使用so

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

此查询选择与
id\u jobcode=220
相对应的所有记录,并从
latitude
logitude
的值在列
geom
中创建几何图形:

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

嗨,吉姆,谢谢你的回复。所以你的代码和我的代码之间唯一的区别就是我无意中使用了一个子查询?这本身会导致所描述的问题吗?i、 e.“Set”函数为子查询(id_jobcode=200)记录集返回一个几何体,因此为所有其他记录返回Null?子查询本身是否应排除所有符合以下条件的作业代码!=220不管是什么情况,我测试了它,它工作了,这么简单,愚蠢的错误,非常感谢。