2013-11-25 124 views
1

我想寫一條SQL指令更新我的數據庫庫存產品數量與所有交付和訂單的總數相關。更新與聚合函數和選擇

UPDATE tbl_Product 
SET tbl_Product.Quantity = Q.Quantity 
FROM 
    tbl_Product 
    INNER JOIN 
    (
     SELECT tbl_Order.IdProduct, 
     SUM(tbl_Delivery.Quantity)-SUM(tbl_Order.Quantity) AS Quantity 
     FROM 
      tbl_Order 
      INNER JOIN 
      tbl_Delivery 
       ON tbl_Order.IdProduct = tbl_Delivery.IdProduct 
     GROUP BY tbl_Order.IdProduct 
    ) as Q 
     ON Q.IdProduct = tbl_Product.IdProduct; 

出現語法錯誤。

+1

你能發佈你的錯誤陳述嗎? –

回答

0

嘗試爲正在更新的表分配暱稱。這裏是抽象子查詢的代碼。這有幫助嗎?

UPDATE P 
SET P.Quantity = Q.Quantity 
FROM tbl_Product P 
INNER JOIN (...) as Q 
ON Q.IdProduct = P.IdProduct; 
1
UPDATE tbl_Product 
    INNER JOIN 
    (
     SELECT tbl_Order.IdProduct, 
     SUM(tbl_Delivery.Quantity)-SUM(tbl_Order.Quantity) AS Quantity 
     FROM 
      tbl_Order 
      INNER JOIN 
      tbl_Delivery 
       ON tbl_Order.IdProduct = tbl_Delivery.IdProduct 
     GROUP BY tbl_Order.IdProduct 
    ) as Q 
     ON Q.IdProduct = tbl_Product.IdProduct 
     SET tbl_Product.Quantity = Q.Quantity 

刪除FROM移動SET最後。

1

訪問SQL不支持您嘗試使用的語法。查詢

UPDATE foo 
SET foo.thing = bar.thing 
FROM 
    foo 
    INNER JOIN 
    bar 
     ON foo.ID = bar.ID 

結果爲「查詢表達式中出現語法錯誤(缺少運算符)」。

在訪問SQL相應的查詢將

UPDATE 
    foo 
    INNER JOIN 
    bar 
     ON foo.ID = bar.ID 
SET foo.thing = bar.thing 
1

接入可挑剔與使用加入一個UPDATE。在某些情況下,它可能會抱怨查詢是隻讀的。而且由於您的UPDATEGROUP BY結合使用,這可能發生在這裏。

如果是這樣,您可以使用DSum,因此Access會認爲您的查詢是可編輯的。如果IdProduct是數字數據類型使用此...

UPDATE tbl_Product AS p 
SET p.Quantity = 
    DSum("Quantity", "tbl_Delivery", "IdProduct=" & p.IdProduct) 
    - DSum("Quantity", "tbl_Order", "IdProduct=" & p.IdProduct) 

但如果它是文本類型,用引號括起來的值,第三個選項DSum

UPDATE tbl_Product AS p 
SET p.Quantity = 
    DSum("Quantity", "tbl_Delivery", "IdProduct='" & p.IdProduct & "'") 
    - DSum("Quantity", "tbl_Order", "IdProduct='" & p.IdProduct & "'")