Я считаю, что проблема в том, что ваш запрос SELECT возвращает более одной строки. Я не уверен, почему, но у вас, вероятно, есть несколько строк с одним и тем же id_empresa.
Если все эти «повторяющиеся» строки имеют одинаковые значения, может оказаться полезным использовать условие GROUP BY .
UPDATE item_empresa SET
preco = (SELECT preco FROM item_empresa WHERE id_empresa = 1 GROUP BY id_empresa)
WHERE id_empresa = 2;
Если пароли линий не совпадают, вам нужно будет найти способ выбрать тот, который вам действительно нужен. Попробуйте добавить больше условий в вызов * WHERE .