查询更新表中的所有行

时间:2018-08-26 18:31:48

标签: c# sql-server tsql

我正在尝试更新数据库中单个物料的数量,但是查询正在更新“数量”列中的所有值。

如何解决?

这是我的查询:

UPDATE Stocks 
SET Stocks.Quantity = Stocks.Quantity - PointofSale.Quantity 
FROM PointofSale 
WHERE ItemID IN (SELECT ItemID FROM Recipe 
                 WHERE MenuID IN (SELECT MenuID FROM Menu 
                                  WHERE ItemName IN (SELECT Product FRPOM PointofSale 
                                                     WHERE POSID > 0)))

下面是我的表和数据库布局的屏幕截图。

这是我的Stocks表:

这是将在我的更新查询中调用的ID:

这是我的菜单,其中包含所有产品:

这是我的POS,具有数量列:

2 个答案:

答案 0 :(得分:2)

(评论太久了)

@Alex回答中的一段代码,上面有我的注释注释:

UPDATE s SET 
  Quantity = Quantity - POS.Quantity
FROM Stocks s
INNER JOIN PointofSale AS POS
 ON ???
INNER JOIN Menu AS M
  ON M.ItemName = POS.Product
INNER JOIN Recipe AS R
  ON R.MenuID = M.MenuID
WHERE POS.POSID > 0

Stocks应该如何连接到这些表中的任何一个?那就是你麻烦的原因。 Stocks中的每一行都“匹配”其他表中的所有行,因为实际上没有匹配条件。这种情况称为MISSING JOIN PREDICATE

答案 1 :(得分:1)

尝试此请求:

...