我有一个过滤/添加条件到递归CTE查询以避免NULL结果的问题。查询的递归部分一旦遇到从第一个非递归查询中获取的降序系列gid中的间隙就停止循环(基本上当x.t_gid = s.g2_t_gid
中的WHERE
过滤器为NULL时)。
x.t_gid和s.g2_t_gid正在降序系列的整数,而x.t_gid(n)= s.g2_t_gid(n + 1)。系列中应该有差距gids但我希望递归部分只是继续到下一行,如果它返回NULL结果。请参阅下面的代码。
WITH RECURSIVE snapped_points(t_gid, r_rdname, r_gid, r_ufi, snapped_geom, snapped_distance, g2_t_gid, g2_r_rdname, s_g2_snapped_geom, route_distance) AS (
(SELECT t_gid,
r_rdname,
r_gid,
r_ufi,
snapped_geom AS snapped_geom,
snapped_distance,
g2_t_gid,
g2_r_rdname,
g2_snapped_geom AS s_g2_snapped_geom,
route_distance
FROM x_joined_snapped x
LIMIT 1)
UNION ALL
(SELECT x.t_gid,
x.r_rdname,
x.r_gid,
x.r_ufi,
x.snapped_geom,
x.snapped_distance,
x.g2_t_gid,
x.g2_r_rdname,
x.g2_snapped_geom,
x.route_distance
FROM snapped_points s
INNER JOIN x_joined_snapped x
ON x.t_gid <> s.t_gid
AND (x.t_gid = s.g2_t_gid AND x.snapped_geom = s.s_g2_snapped_geom)
--OR (x.t_gid < s.g2_t_gid), <-- difference between 1s and 24s**
LIMIT 1
)
)
SELECT t_gid, r_gid, r_ufi, r_rdname, snapped_distance, snapped_geom FROM snapped_points
;
我的目标是什么。
一旦递归部分遇到表x.t_gid <> s.g2_t_gid
中的间隙,它就会停止循环。我已经能够通过向OR x.t_gid < s.g2_t_gid
子句添加WHERE
来解决此问题,但这会将计算时间从1000毫秒增加到24,000毫秒。
我已尝试使用COALESCE但无法使其工作,并且递归CTE查询不允许在查询中重复递归部分。
我是一个完整的菜鸟,所以我确信这个代码可以变得更漂亮,更高效。任何帮助将不胜感激。