更新case和st_within会产生错误的更新

时间:2015-07-01 11:19:20

标签: postgis case-statement

我使用下面的更新将表中的地区名称插入表 motionslisten 中的一列。

motionslisten 包含市区五个区的点数据以及市外的一些数据。但是,更新只输入一个区的名称并进入“市外”区域。在所有其他行中。

当我使用st_within运行更新但没有case语句时,市政当局内的所有行都使用正确的区域进行更新,因此必须在case语句或case语句与st_within的组合中出现错误。

我可以在两个单独的步骤中进行更新,但由于我需要更新触发器功能,我需要让它工作。

为什么会产生错误的结果?

update motionslisten m
set district = case
    when st_within(m.wkb_geometry::geometry, d.sdo_geometry::geometry)
    then d.name
    else
    'Outside municipality'
    end
from district d;

1 个答案:

答案 0 :(得分:1)

我认为你遇到了这个问题,因为你没有在你的案件陈述中加入运动名单和地区之间的联系。所以,它用st_within评估点和区的所有组合,当然其中大部分是'外部市政当局'

此更新将更新您期望的行:

update motionslisten m
set district d.name   
from district d where  st_within(m.wkb_geometry::geometry, d.sdo_geometry::geometry);

在触发器功能中运行两个更新的问题是什么?