Что вы делаете неправильно, так это то, что ваш подзапрос не связан с основным запросом. В результате получается продукт по Карте: каждая строка назначения обновляется с каждой строкой подзапроса. Вы можете добавить where temp.wijkcode = dst.wijkcode
к запросу, чтобы выбрать только одну строку на строку из подзапроса.
(или использовать компактную форму, как показано в ответе @forpas)
update event_locations dst
set stadsdeel = temp.stadsdeel
from (select wijkcode,
case wijkcode when 34406 then 'Center'
else 'Misc'
end as stadsdeel
from event_locations
) as temp
WHERE temp.wijkcode = dst.wijkcode -- <<-- connect temp to the main query
;
Но вы также можете поместить соединение внутри в подзапросе, теперь оно будет давать ровно одну совпадающую икру на строку:
update event_locations dst
set stadsdeel = temp.stadsdeel
from (select
case wijkcode when 34406 then 'Center' else 'Misc' end as stadsdeel
from event_locations src
WHERE src.wijkcode = dst.wijkcode
) as temp;
Или вы можете уменьшить подзапрос до скалярного подзапроса, в результате чего будет получено только одно * значение в строке. запросы в один: таблица в основном обновляется из себя, в любом случае:
update event_locations
set stadsdeel = case wijkcode when 34406 then 'Center' else 'Misc' end
;