我遇到了在多行中的表之间进行计算的问题。
这是我的代码:
UPDATE StockList
SET stkQuantity = stkQuantity - (SELECT quantity FROM mCalculate)
WHERE stkID = (SELECT stkID FROM mCalculate)
如果表mCalculate
只有一行数据,则StockList
中的计算成功,但如果表mCalculate
有多行数据,则会出错:
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
任何人都可以帮我解决这个问题并向我解释我遇到的问题是什么?
图片参考:
窗口:
数据库:
答案 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