我使用下面的更新将表区中的地区名称插入表 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;
答案 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);
在触发器功能中运行两个更新的问题是什么?