具有多行的表之间的计算

时间:2014-07-28 20:35:36

标签: sql-server

我遇到了在多行中的表之间进行计算的问题。

这是我的代码:

UPDATE StockList 
SET stkQuantity = stkQuantity - (SELECT quantity FROM mCalculate) 
WHERE stkID = (SELECT stkID FROM mCalculate)

如果表mCalculate只有一行数据,则StockList中的计算成功,但如果表mCalculate有多行数据,则会出错:

  

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

任何人都可以帮我解决这个问题并向我解释我遇到的问题是什么?
图片参考:
窗口: enter image description here 数据库: enter image description here

3 个答案:

答案 0 :(得分:0)

在其他问题中,这一行在这里:

 WHERE stkID = (SELECT stkID FROM mCalculate)

=需要一个值,因此,除非您的mCalculate表只有一行,否则您将收到错误。

您的错误:Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.很可能是由于WHERE子句造成的。

答案 1 :(得分:0)

您的子选择

(SELECT quantity FROM mCalculate)

需要一个WHERE子句来确保此select只返回一行。同上:

(SELECT stkID FROM mCalculate)

如果没有这些表的SCHEMA定义,很难帮助您确切了解WHERE子句应该是什么。

答案 2 :(得分:0)

在这种情况下,你必须使用join而不是sub查询

UPDATE S
SET stkQuantity = stkQuantity - M.quantity
From stocklist s 
Join mcalculate m
On  s.stkid = m.stkid