Во-первых, вам нужна какая-то агрегация.
Во-вторых, я не понимаю, где на самом деле расположены столбцы. Например, я ожидаю, что order_details
будет иметь код продукта.
Я бы ожидал такой запрос:
UPDATE orders o
(SELECT od.order_id,
SUM(od.Unitspurchased * COALESCE(c.`Contract Price`, s.`Sale price`)) as total_price
FROM order_details od JOIN
stock s
ON od.`Product Code` = s.`Product code` LEFT JOIN
contracts c
ON od.contractId = c.`Contract ID`
GROUP BY od.order_id
) od
SET o.`total cost` = od.total_cost ;
Для присоединения к контрактам вам также может понадобиться:
ON od.contractId = c.`Contract ID` AND
od.`Product Code` = c.`Product Code`
Если товар находится в таблице контракта.
Я бы также порекомендовал вам исправить имена столбцов. Наличие пробелов означает, что вам нужно экранировать имена, что затрудняет написание и чтение запроса.