问题:
我有一个装满多边形(国家地区)的表格。其中一些多边形具有某种可能已经被选中或未被选中的属性。在这种情况下,属性称为“spread”,而“checked”值为1。
现在我想运行一个查询,找到所有“checked”多边形。 类似于:
运行此查询,它将设置相邻多边形的属性spread为1,time为2,同时不触及spread = 1的原始多边形。 因此,它提供了完美的答案。
现在我想运行一个查询,找到所有“checked”多边形。 类似于:
SELECT * FROM gemstat WHERE spread = 1
然后我想在每个未被检查的相邻多边形中将“spread”属性设置为“1”。(我还想设置第二个属性,但那只是一个小补充)
首先,让我们从选择所有与具有spread-value = 1的多边形相邻的多边形的查询开始。
SELECT (b."GEM_NR")
FROM gemstat_simple5 as a
JOIN gemstat_simple5 as b
ON ST_Touches((a.the_geom),b.the_geom)
where a.spread =1;
这个查询返回所有spread=1的多边形的邻居。
现在我想根据这个子查询的结果更新表格。使用John Powell(又名Barca)提供的以下代码实现:
Update gemstat_simple5 gem set spread=1, time=2
FROM (
SELECT (b."GEM_NR")
FROM gemstat_simple5 as a,
gemstat_simple5 as b
WHERE ST_Touches(a.the_geom, b.the_geom)
AND a."GEM_NR" != b."GEM_NR"
AND a.spread = 1
) as subquery
WHERE gem."GEM_NR" = subquery."GEM_NR"
运行此查询,它将设置相邻多边形的属性spread为1,time为2,同时不触及spread = 1的原始多边形。 因此,它提供了完美的答案。