假设我有这两个表:产品和存储
产品有一个ProductId,每个记录的QuantityAvailable
存储的每条记录都有LocationId,ProductId和QuantityAvailable(ProductId是产品表的FK)。 'ProductId'可以存储在多个'LocationId'中,因此ProductId和LocationId组成一个复合主键。
我想要的是一个能够确定“产品”是否存储的SQL查询,如果是,则累计存储中的“数量”是否小于“QuantityAvailable”。
简单地说,我想在Product表中列出所有'ProductId',其中Storage表中所有相关条目的'Quantity'总和小于Product Table的'QuantityAvailable'。
如何实现这一目标(不改变表结构)?
感谢
答案 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