2016-10-07 2 views
1

Это сообщение связано с another question of mine. Я придумал рекурсивный запрос, который в основном хочет, я хочу. Пока счетчик для атрибута dist_calc_points не превышен, рекурсивный запрос выполняется. Но это работает только для одной записи (см. Пункт WHERE v2_channel.id=2). Как я могу применить этот запрос ко всей таблице?Как применить рекурсивный запрос к всей таблице?

WITH RECURSIVE dist(x, the_geom, d) AS (
    SELECT 
     0::double precision, 
     the_geom, 
     0::double precision 
    FROM v2_channel where v2_channel.id=2 
     UNION ALL 
    SELECT 
     x+1, 
     v2_channel.the_geom AS gm, 
     d+(1/v2_channel.dist_calc_points) AS dist_calc_pnts 
    FROM v2_channel, dist 
     WHERE dist.x<v2_channel.dist_calc_points AND v2_channel.id=2 
) 
SELECT *, ST_AsText(ST_LineInterpolatePoint(the_geom, d)) FROM dist; 

ответ

1

Чтобы позволить CTE применяться к нескольким строкам, вы должны иметь возможность идентифицировать эти строки. Поэтому просто добавьте ID:

WITH RECURSIVE dist(id, x, the_geom, d) AS (
    SELECT 
     id, 
     0::double precision, 
     the_geom, 
     0::double precision 
    FROM v2_channel 
     UNION ALL 
    SELECT 
     dist.id, 
     x+1, 
     v2_channel.the_geom AS gm, 
     d+(1/v2_channel.dist_calc_points) AS dist_calc_pnts 
    FROM v2_channel JOIN dist 
     ON dist.x < v2_channel.dist_calc_points 
     AND dist.id = v2_channel.id 
) 
SELECT *, ST_AsText(ST_LineInterpolatePoint(the_geom, d)) FROM dist; 
+0

да, спасибо много! – LarsVegas

Смежные вопросы