将表的每个记录中的整数字段与另一个表中的关联记录的总和进行比较

时间:2011-07-25 14:36:13

标签: mysql sql

假设我有这两个表:产品和存储

产品有一个ProductId,每个记录的QuantityAvailable

存储的每条记录都有LocationId,ProductId和QuantityAvailable(ProductId是产品表的FK)。 'ProductId'可以存储在多个'LocationId'中,因此ProductId和LocationId组成一个复合主键。

我想要的是一个能够确定“产品”是否存储的SQL查询,如果是,则累计存储中的“数量”是否小于“QuantityAvailable”。

简单地说,我想在Product表中列出所有'ProductId',其中Storage表中所有相关条目的'Quantity'总和小于Product Table的'QuantityAvailable'。

如何实现这一目标(不改变表结构)?

感谢

1 个答案:

答案 0 :(得分:0)

以下查询将为您提供每种产品的数量总和:

select ProductID, sum(Quantity) as ProductQuantity
from
    Storage
group by
    ProductID

现在您只需要将该查询用作派生表,加入它并比较您的2个数量:

select
    *
from
    Product p
    inner join (
        select ProductID, sum(Quantity) as ProductQuantity
        from
            Storage
        group by
            ProductID) q
        on  p.ProductID = q.ProductID
where
    q.ProductQuantity < p.QuantityAvailable