根据查询结果更新字段

Updating fields based on results of a query

提问人:PKYNI 提问时间:1/5/2023 最后编辑:PKYNI 更新时间:1/6/2023 访问量:73

问:

因此,在这种情况下,一个人可以订购产品。我有一个查询,它返回订单 ID 的结果,并提供该人订购的产品。 我的问题是将其调整为更新查询,以便从产品表中的库存量中减去 OrderProduct 表/查询中的数量。

SQL 创建下面提供的表和查询以获取结果

CREATE DATABASE StockControl;

CREATE TABLE Membership (
    MemberID int NOT Null,
    LastName varchar(255),
    FirstName varchar(255),
    Primary Key(MemberID)
);

CREATE TABLE Orders (
    OrderID int NOT Null,
    MemberID int,
    Primary Key(OrderID)
);

CREATE TABLE Product (
    ProductID int NOT Null,
    Price int,
    Stock int,
    Primary Key(ProductID)
);

CREATE TABLE OrderProduct (
    ProductID int,
    OrderID int,
    Quantity int
);

INSERT INTO Membership(MemberID,LastName,FirstName)
VALUES (2,'Me','Too'),(33,'Darren','Kelly');

INSERT INTO Orders(OrderID,MemberID)
VALUES (1,33),(5,2);

INSERT INTO Product(ProductID,Price,Stock)
VALUES (1,30,12),(2,25,12),(3,25,12),(4,25,12),(5,25,12),(6,25,12),(7,25,12),(8,25,12),(9,25,12),(10,25,12);

INSERT INTO OrderProduct(ProductID,OrderID,Quantity)
VALUES (1,5,1),(3,1,4),(9,1,6),(10,1,2);

这是将所有产品作为 orderID 1 的一部分返回的查询,在完整版中,这将可以是可变的。

SELECT OrderProduct.ProductID, OrderProduct.OrderID, OrderProduct.Quantity, Product.Price, [Quantity]*[Price] AS Cost
FROM Product INNER JOIN OrderProduct ON Product.ProductID = OrderProduct.ProductID
GROUP BY OrderProduct.ProductID, OrderProduct.OrderID, OrderProduct.Quantity, Product.Price, [Quantity]*[Price]
HAVING (((OrderProduct.OrderID)=1))
ORDER BY OrderProduct.OrderID;

这将返回正确的结果,但是在尝试将其实现到更新时,我卡住了。我想要它,这样它就会查看 3 个结果,并从产品 3 中减去 4,从产品 6 中减去 9,从产品 2 中减去 10

到目前为止的尝试

UPDATE SingleOrder INNER JOIN Product ON SingleOrder.ProductID = Product.ProductID SET Product.Stock = Product.Stock-SingleOrder.Quantity WHERE ((Product.ProductID=SingleOrder.ProductID));

如果不清楚,我很乐意更新问题等。

谢谢

MS-Access SQL 更新

评论

0赞 June7 1/6/2023
理想情况下,不会使用库存余额更新表。保存交易并在需要时计算余额。Access 不允许对不可编辑(不可更新)查询执行 UPDATE 操作,这就是聚合查询。这是一个常见的话题。您尝试的代码应该被编辑到问题中,而不是评论中。
0赞 June7 1/6/2023
查看 allenbrowne.com/AppInventory.html。如果确实必须保存,可以使用 DSum() 域聚合函数或 VBA 过程完成 UPDATE。
0赞 June7 1/6/2023
但是,您的查询中没有聚合函数,那么为什么要使用 GROUP BY?你应该有吗?Sum([Quantity]*[Price]) AS Cost
0赞 PKYNI 1/6/2023
这是我继承的一个项目,因此查询中使用了 GROUP BY 和额外的字段。我将研究 DSum,但这个项目不会真正允许 VBA 过于频繁地使用,而且自从我查看 VBA 以来已经有十多年了,但会将其作为提醒

答: 暂无答案