Просто соедините [ Как выбрать каждую строку, где значение столбца НЕ ОТЛИЧНО и ответ @Gordon Linoff:
create table a (
id serial primary key
,product_name text
,value int
);
create table b (
id serial primary key
,product_name text
,value int not null
);
insert into a (product_name) values
('A')
,('B')
,('C')
,('D')
,('E')
,('E');
insert into b (product_name,value) values
('A',1)
,('A',1)
,('B',42)
,('C',1)
,('C',2)
,('E',1)
;
update a
set value = b.value
from (select product_name, min(value) as value
from b
group by b.product_name
having 1 = count(*)
) b
where b.product_name = a.product_name
and a.product_name not in
(select product_name
from a
group by product_name
having 1 < count(*));
@ Gordon Lindof Ваш ответ не удастся, если product_name и value обадублируется в b (пример product_name = A) и пропускает требование product_name, не дублированное в a.