我正在尝试编写一条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;
语法错误。
答案 0 :(得分: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 :(得分:1)
Access SQL不支持您尝试使用的语法。查询
UPDATE foo
SET foo.thing = bar.thing
FROM
foo
INNER JOIN
bar
ON foo.ID = bar.ID
导致查询表达式中出现“语法错误(缺少运算符)。”
Access SQL中的相应查询将是
UPDATE
foo
INNER JOIN
bar
ON foo.ID = bar.ID
SET foo.thing = bar.thing
答案 2 :(得分:1)
使用联接的UPDATE
访问可能很挑剔。在某些情况下,它可能会抱怨查询是只读的。由于您的UPDATE
使用了与GROUP 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 & "'")
答案 3 :(得分:0)
尝试为要更新的表分配昵称。这是您抽象的子查询的代码。这有帮助吗?
UPDATE P
SET P.Quantity = Q.Quantity
FROM tbl_Product P
INNER JOIN (...) as Q
ON Q.IdProduct = P.IdProduct;