sql - 将总和与总存储空间进行比较
问题描述
我正在尝试将存储在一个仓库中的产品总量与该仓库中存在的物品总和进行比较。到目前为止,我有这个(告诉我一种产品中有多少存储在其中一个仓库中)
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 语句返回多个值(?)。
解决方案
您确实应该学习限定列引用,以便清楚它们来自哪个表。这使得其他人(也许未来的你)更容易遵循你所写的逻辑。
也就是说,这两个查询之间的唯一区别——就返回的值而言——是连接到osproduct
.
如果发生以下两种情况之一,这只join
能改变结果:
- 行被过滤掉,因为
pid
不匹配。 - 行是重复的,因为
pid
在 中重复osproduct
。
我们可以消除的第二个条件,假设它pid
是主键osproduct
——这似乎是一个非常合理的假设。
假设列从不NULL
在引用表中并且具有正确的外键关系,则可以消除第一个。
因此,我认为您尝试做的事情没有特别的价值。可靠的数据模型可确保查询返回的值是一致的。
推荐阅读
- reactjs - Firebase/Firestore/React - 是什么阻止用户将一百万个字段添加到他们自己的用户文档中?
- azure - 获取 CloudBlob.DownloadToFileParallelAsync 的进度
- r - 分组没有额外的包
- c++ - 使用 g++ 编译和链接 C++ 程序,出现“未定义引用”错误
- vue.js - 在 Vue CLI 中构建时如何向 index.html 添加 HTML 注释?
- c# - 从 JWT 验证 User.Identity
- sql - PostgreSQL:仅当表存在时才从表中选择
- python - 从 unittest 中调用 subprocess.Popen 失败,但从 __main__ 调用时有效
- python - SQLAlchemy:通过删除重复项并保留最大值来选择 DISTINCT ON 列
- d3.js - 使圆环图可点击