让我们假装我们有一家超市。 我们得到了一个名为Sales的表,其中每个记录都是一篇文章),因此如果我们扫描3篇文章,我们将有3行,其中包含以下列:ArticleId和Amount,其中amount始终为1。 然后我们有一个名为Articles的表,它有列:ArticleId和AvailableAmount。
销售完成后,我们需要计算Sales表中相同的记录,然后用AvailableAmount更新AvailableAmount,减去每篇文章的总和。
我在想这样的事情,但我不知道我是否正确思考:
UPDATE Articles
SET
AvailableAmount = AvailableAmount - (
Select ArticleId,Count(*) From Sales Group by ArticleId HAVING Count(*) > 1
)
WHERE
ArticleId in(Select distinct ArticleId FROM Sales)
答案 0 :(得分:1)
此查询几乎正确,但
HAVING Count(*) > 1
没有意义,子查询必须只返回一个值,因此您需要correlated subquery:
UPDATE Articles
SET AvailableAmount = AvailableAmount -
(SELECT COUNT(*)
FROM Sales
WHERE ArticleId = Articles.ArticleId)
WHERE ArticleId IN (SELECT ArticleId
FROM Sales)