В подзапросе отсутствует условие корреляции:
update A
set category_id = (select B.id
from C join
B
on B.category = C.category
where A.id = C.id
)
where exists (select 1 from C where A.id = C.id);
Чтобы связать запрос, вы ссылаетесь на внешнюю ссылку, как правило, в состоянии where
.Вы не повторяете ссылку на таблицу в предложении from
.
Обратите внимание, что внешнее соединение не требуется.Если совпадений нет, значение будет NULL
.