2015-05-24 22 views
0

解决的计算值UPDATE/INSERT从2个表

我坚持的东西,我甚至不知道是否有可能是我想要做的事。

基本上我想更新(或更好的是,立即与插入)一个特定的领域与当前表中的乘法和另一个表中的值。

这是迄今为止查询:

UPDATE Orders 

SET Total = (SELECT p.Price * o.Quantity 
       FROM Products p, Orders o 
       WHERE p.ProductID = o.ProductID 
       AND p.ProductID = 110) 

WHERE o.OrderID = 112; 

奇怪的是,当我完全运行SELECT部分​​,它返回一个整数干净。

当我删除了“子查询”并插入这个数字在它的位置,更新查询工作正常,但是当我试图做到像上面显示我得到一个错误

“操作必须使用一个可更新查询'

有没有人见过并解决过这个问题?任何帮助将是非常赞赏,谢谢提前

编辑

感谢您的帮助球员,我不得不做一些调整,但现在它完美。我用下面的查询:(只是要清楚,这是一个.mdb Access数据库)

UPDATE Orders 
INNER JOIN Products ON Products.ProductID = Orders.ProductID 
SET Orders.Total = Orders.Price * Orders.Quantity 
WHERE OrderID = 112; 
+0

如果这个问题已经解决,那么你应该做的是选择正确的答案。然后我们会知道问题已解决(不在问题顶部添加'已解决')。 –

回答

1

我想你想用外部查询相关子查询:

UPDATE Orders 
    SET Total = (SELECT p.Price * orders.Quantity 
       FROM Products as p 
       WHERE p.ProductID = 110 
       ) 
    WHERE orders.OrderID = 112; 

你的版本需要quantity从订单产品110,而不是112

编辑:

您也可以表达这种联接:

UPDATE o 
    SET Total = p.Price * orders.Quantity 
    FROM Orders o, 
     (SELECT * 
     FROM Products as p 
     WHERE p.ProductID = 110 
     ) as p 
    WHERE orders.OrderID = 112; 
0

您可以直接与该表连接,并相应地进行更新用类似

UPDATE Orders 
INNER JOIN Products ON Products.ProductID = Orders.ProductID 
AND Products.ProductID = 110 
AND Orders.OrderID = 112 
SET Total = Products.Price * Orders.Quantity; 
0

我认为这将是稍微更好的选择。它与Gordon的查询类似,但在Products和Orders表之间使用显式JOIN,而不是表之间的隐式交叉连接。

UPDATE o 
SET Total = p.Price * o.Quantity 
FROM Products p 
    INNER JOIN Orders o 
     ON p.ProductID = o.ProductID 
WHERE o.OrderID = 112 
    AND p.ProductID = 110 

虽然结果是一样的,但是我建议这种写作风格的查询,因为我确信戈登也会提出这样的建议。