str*_*rum 3 sql relational-division
这是我从一本书中得到的一个问题(不记得哪一本),它是这样的:
你有三个表:
supId, name)prodId, name)supId, prodId)您需要通过一个查询找到供应商X所拥有的所有产品(或更多)的所有供应商(假设供应商X是其中的那个supId=1).
(如果供应商1在他的库存中有香蕉和苹果,你需要找到所有至少带有香蕉和苹果的供应商)
您只能使用标准SQL(包括连接).
显然这是一个已知的问题/问题,你应该看看这个问题: 如何过滤多次通过关系的SQL结果 (优秀的解决方案和分析)
这个问题被称为关系分裂.
一种解决方案是双重否定.您可以选择供应商X未交付产品的所有供应商,这些供应商不是由他们提供的:
select distinct other_supplier.SupID
from Inventory other_supplier
where not exists
(
select *
from Inventory supplier_X
where supplier_X.supId = 1 -- For supplier X
and not exists
(
select *
from Inventory other_product
where other_supplier.supId = other_product.Supid
and supplier_X.prodId = other_product.prodId
)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |