Обновление Postgresql с использованием соединения с использованием Postgis - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть две таблицы с именами MAIN_WAYS и SUB_WAYS.

MAIN_WAYS (id, producer, geoemtry, length, size, ...)
SUB_WAYS  (id, producer, geometry, ...)

Итак, я хочу обновить столбец производителя SUB_WAYS так же, как столбец производителя MAIN_WAYS, где затрагиваются геометрии. Я могу объединить эти две таблицы.

select 
    sw.id sw_id, 
    sw.producer sh_producer, 
    mw.id mw_id, mw.producer mw_producer 
from 
    sub_ways sw,
    main_ways mw    
where 
    st_touches(mw.geometry, sw.geoemtry);

А

sw_id    sh_producer  mw_id   mw_producer
1        null         1       x
2        null         2       x
3        null         3       y
4        null         5       z

Один из основных способов может касаться нескольких вспомогательных способов. В этом положении все метро, ​​которые касались одного метро, ​​будут одного и того же производителя.

update  
    sub_ways
set
    producer = mw.producer
from
    sub_ways sw
inner join
    main_ways mw on st_touches(mw.geometries, sw.geoemtry)
where
    st_touches(mw.geometries, sw.geoemtry) and  
    sw.producer is null;

Но этот запрос задает всем подпроизводителям одинаковые значения.

Как можно обновить это?

1 Ответ

0 голосов
/ 02 ноября 2018

Вы не присоединили свою таблицу обновлений к своему результату (из предложения), поэтому она обновилась до значений из последней записи вашего набора из предложения.

update  
    sub_ways sw
set
    producer = mw.producer
from
    main_ways mw 
where
    st_touches(mw.geometries, sw.geoemtry) and  
    sw.producer is null;
...