计算表中列相同的列,然后从另一个表中的列中减去

时间:2014-10-15 08:30:21

标签: sqlite

让我们假装我们有一家超市。 我们得到了一个名为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)

1 个答案:

答案 0 :(得分:1)

此查询几乎正确,但

  1. 子查询必须只返回一列
  2. HAVING Count(*) > 1没有意义,
  3. 子查询必须只返回一个值,因此您需要correlated subquery

    UPDATE Articles
    SET AvailableAmount = AvailableAmount -
            (SELECT COUNT(*)
             FROM Sales
             WHERE ArticleId = Articles.ArticleId)
    WHERE ArticleId IN (SELECT ArticleId
                        FROM Sales)