我正在尝试根据不同的条件和几何交集更新我的 PostgreSQL 表中的多个列。
我的输入表由数百万个 100mtx100mt 的正方形组成,其结构是:
id_grid|geom|road1|road2|road3|road4|road5|road6|
列Road 1,2,3...
是空的。
我的第二个表是“道路”,它由“传奇”字段中描述的 6 种道路组成:
id_road|geom|legenda
我需要Road 1,2,3...
根据与网格相交的道路类型来更新带有 X 的列。例如,如果 id 为 1 的广场与道路“road1”和“road3”相交,则其行应为:
id_grid|geom|road1|road2|road3|road4|road5|road6|
1 |abc |x |null |x |null |null |null |
为了做到这一点,我使用了这个查询:
update
anagr_grid100_marche_clc
set
mob_autostrada = case s.legenda WHEN 'AUTOSTRADA' THEN 'x' END,
mob_strada_principale = case s.legenda WHEN 'STRADA PRINCIPALE' THEN 'x' END,
mob_strada_secondaria = case s.legenda WHEN 'STRADA SECONDARIA' THEN 'x' END,
mob_strada_locale = case s.legenda WHEN 'STRADA LOCALE' THEN 'x' END,
mob_altra_strada = case s.legenda WHEN 'ALTRA STRADA' THEN 'x' END,
mob_ferrovie = case s.legenda WHEN 'FERROVIA' THEN 'x' END
from
stradebis as s
where
st_intersects(anagr_grid100_marche_clc.geom, s.geom)
但它的输出不正确。基本上,多个列应同时更新为“x”,但此查询不允许这样做:如果第一个更新的列具有值“x”,则其他列在任何情况下都不会。
有人可以帮助我吗?