Я думаю, вам нужно exists
:
update tablea a
set is_nearby = (case when exists (select 1
from tableb b
where b.condition1 = 1 and st_dwithin(a.geom, b.geom, 100)
then true
else false
end);
Или проще без case
:
update tablea a
set is_nearby = (exists (select 1
from tableb b
where b.condition1 = 1 and st_dwithin(a.geom, b.geom, 100)
);
Проблема с вашим запросом заключается в том, что from
генерирует перекрестный продукт, поэтому все строки из b
сравниваются с каждой строкой из a
. Однако устанавливается только одно значение - и это значение берется из строки произвольного соответствия в b
.