2016-10-07 3 views
1

この投稿はanother question of mineに関連しています。私は基本的に欲しいと思っている再帰的なクエリを考え出しました。 dist_calc_points属性の数が再帰クエリを超えていない限り、実行されています。しかし、これは1つのエントリに対してのみ機能します(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

関連する問題