首页 > 解决方案 > 将总和与总存储空间进行比较

问题描述

我正在尝试将存储在一个仓库中的产品总量与该仓库中存在的物品总和进行比较。到目前为止,我有这个(告诉我一种产品中有多少存储在其中一个仓库中)

select warehousename, pname, sum(numitems)
from oswarehouse join osshelf on whid=warehouseid
join osstored_in using (sid,whid) 
join osproduct  using (pid)
group by warehousename, pname 

现在我想将它与这个 select 语句进行比较(它只是告诉我该仓库中存储的产品总量。

select sum(numitems) from oswarehouse 
join osshelf on whid=warehouseid 
join osstored_in using (sid,whid) group by warehousename

如果是的话,这可能吗?我试过了

having sum(numitems) > (select sum(numitems) from oswarehouse 
join osshelf on whid=warehouseid 
join osstored_in using (sid,whid) group by warehousenameect 

但这只会导致废话,因为上面的 select 语句返回多个值(?)。

标签: sqloracle-sqldeveloper

解决方案


您确实应该学习限定列引用,以便清楚它们来自哪个表。这使得其他人(也许未来的你)更容易遵循你所写的逻辑。

也就是说,这两个查询之间的唯一区别——就返回的值而言——是连接到osproduct.

如果发生以下两种情况之一,这只join能改变结果:

  • 行被过滤掉,因为pid不匹配。
  • 行是重复的,因为pid在 中重复osproduct

我们可以消除的第二个条件,假设它pid是主键osproduct——这似乎是一个非常合理的假设。

假设列从不NULL在引用表中并且具有正确的外键关系,则可以消除第一个。

因此,我认为您尝试做的事情没有特别的价值。可靠的数据模型可确保查询返回的值是一致的。


推荐阅读