2015-05-24 23 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 

雖然結果是一樣的,但是我建議這種寫作風格的查詢,因爲我確信戈登也會提出這樣的建議。