因此客户购买产品。一些客户签订了单独产品的合同,并支付了较低的每单位成本。我试图创建一个更新查询,该查询通过将购买的单位乘以股票价格或合同价格(取决于)来计算总成本。我正在使用phpmyadmin。我已经坚持很长时间了,不胜感激。
基本上我想根据我的order_details表中的详细信息更新订单表中的总费用。我已经使用CASE决定是将单位乘以合同价格还是股价。
当我在下面运行查询时,我没有收到任何错误,但它不会影响表中的任何行
UPDATE orders
INNER JOIN order_details ON orders.`Order No` = order_details.OrderId
INNER JOIN contracts ON order_details.contractId = contracts.`Contract ID`
INNER JOIN stock ON contracts.`Product Code` = stock.`Product code`
SET orders.`total cost` = (CASE WHEN order_details.contractId =
contracts.`Contract ID` THEN order_details.Unitspurchased *
contracts.`Contract Price` ELSE order_details.Unitspurchased * stock.`Sale
price` END )
WHERE order_details.OrderID = orders.`Order No``
答案 0 :(得分:0)
首先,您需要某种汇总。
第二,我不知道这些列的真正位置。例如,我希望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`
如果产品在合同表中。
我还建议您修复列名。空格表示您需要对名称进行转义,这只会使查询难以编写和读取。