sql - 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 更好。
我应该使用案例陈述吗?如果是这样,有人可以帮助这样的陈述,我已经尝试了几种案例陈述变体并且无法执行陈述。
解决方案
欢迎来到 SO。
如果您要更新单个表,则无需使用 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;
推荐阅读
- augmented-reality - ARCore - 增强图像检测是否适用于前置摄像头?
- html - 将粘性位置分配给网格中的侧边栏
- mysql - 如何向 MySQL 表中的 JSON 数组添加值
- django - 仅更新特定字段
- .net - BackgroundWorker 访问类级别变量
- java - 计算不同切片的数量(仅包含唯一数字)
- dictionary - 你如何反转字典?
- unreal-engine4 - 如何在 UE4 中制作一个与多人游戏一起使用的短跑系统(蓝图)
- java - 并发HashMap线程安全和happens-before关系
- graphql - AWS Appsync:如何编写突变更新以增加 1