Zrobiłem:
UPDATE zapasy z LEFT JOIN (SELECT id_towaru, avg( popyt ) AS srednia, STD( popyt ) AS odchylenie FROM produkty GROUP BY id_towaru) p ON z.id_towaru = p.id_towaru SET z.srednia = p.srednia, z.odchylenie = p.odchylenie
i chodzi w bazie jak ta lala. Zobacz czy masz w bazie już rekordy o podanych id. Bo może sie okazać, że nie masz w tabeli "zapasy" rekordów o id_towaru równym takim jaki jest wymagany do UPDATE

W tej chwili masz towary o id = 1, 2, 3, 4, więc tabela zapasy, także takie musi mieć choćby nawet puste poza polem id_towaru, gdyż to
do niego dołączamy wyniki. To tak jakbyś chciał pisać długopisem na kartce, której nie masz. Lub bardziej adekwatnie do przykładu... Jakbyś chciał powiesić ubranie na hakach, choć do ściany ich nie wbiłeś nigdy. Jak sam zauważyłeś zapewne to jest komenda UPDATE a nie INSERT. A by móc coś aktualizować, to to coś już musi istnieć