gpt4 book ai didi

postgresql - 这是 plpgsql 的理想选择吗?

转载 作者:行者123 更新时间:2023-11-29 12:45:53 26 4
gpt4 key购买 nike

我读过的一些关于在 plpgsql 中使用 for 循环的介绍性教程都说过,除非我真的需要 for 循环,否则我应该找到另一种方法。

作为编程新手,我想不出比 for 循环更好的方法。

我想遍历每个地 block 的 gid,通过边界框计算最近的街道交叉口,然后将交叉口 id 分配给地 block 中的 nearest_intersection 列。

此函数的所有部分都运行良好。但我不知道如何将它们放在一起。

BEGIN

FOR gid IN SELECT gid FROM parcels
LOOP
UPDATE parcels SET nearest_intersection =
(select intersection.osm_id
from intersections
order by
intersections.geom <-> (select geom from parcels where gid = parcel_id)
limit 1;)
end loop;
end;

谢谢!

最佳答案

在您当前的代码中,循环确实没有意义,因为单独的 UPDATE 已经处理了 parcels 表的每一行。

你可能想要的是(没有循环):

UPDATE parcels R SET nearest_intersection = 
(select intersection.osm_id
from intersections
order by intersections.geom <-> R.geom
limit 1);

在程序思维中相当于:

for every row R of parcels, find the row in intersections whose geom is the nearest to R.geom and copies its osm_id into R.nearest_intersection


另一方面,如果它必须用循环完成,它看起来像这样:

FOR var_gid IN SELECT gid FROM parcels 
LOOP
UPDATE parcels SET nearest_intersection =
(select intersection.osm_id
from intersections
order by
intersections.geom <-> parcels.geom)
limit 1)
WHERE parcels.gid=var_gid;
end loop;

关于postgresql - 这是 plpgsql 的理想选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23459679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com