Один из подходов состоит в объединении соответствующих таблиц:
SELECT u.name, SUM(i.amount*m.price)
FROM users u
JOIN items i ON u.name = i.user
JOIN market_prices m ON i.item = m.item
GROUP BY u.name;
(SQLfiddle этого находится по адресу: http://sqlfiddle.com/#!9/ec224/6 - я добавил несколько других строк в таблицы, чтобы проверить сложность, поэтому итоговые значения - это не то, что вы получите из своего примера. В частности, я добавил Bananas 3.75
в таблицу Market_prices и John Apples 3
и Pierre Bananas 5
в таблицу Items.)
Цель здесь - связать информацию во всех трех таблицах через общие поля (через JOIN), а также группировать и создавать СУММУ рассчитанных затрат как произведение рыночной цены и количества товаров.
---- отредактировано на основе комментариев ----
Чтобы сделать это как обновление, вы можете попробовать:
UPDATE users
SET basket_value = (SELECT basket FROM
(SELECT name, SUM(i.amount*m.price) AS basket
FROM users u JOIN items i ON u.name = i.username
JOIN market_prices m ON i.item = m.item
GROUP BY u.name) q1 WHERE q1.name = users.name);
У меня есть ощущение, что есть более элегантное решение, но это работает. Модифицированный SQLFiddle: http://sqlfiddle.com/#!9/56245a/1