这是我从一本书上得到的一个问题(不记得是哪本书了),它是这样的:
你有三个表:
- 供应商(
supId,名称
) - 产品(
prodId,名称
) - 库存(
supId, prodId
)
您需要通过一个查询找到所有库存中包含供应商 X 拥有的所有(或更多)产品的供应商(假设供应商 X 是 supId=1
的供应商) .
(因此,如果供应商 1 的库存中有香蕉和苹果,您需要找到所有至少携带香蕉和苹果的供应商)
您只能使用标准 SQL(包括连接)。
显然这是一个已知问题/问题,您应该检查这个问题: How to filter SQL results in a has-many-through relation (优秀的解决方案和分析)
最佳答案
这个问题被称为 relational division .
一个解决方案是双重否定。您可以选择所有供应商,对于这些供应商,不存在供应商 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
)
)
关于sql - 棘手的 sql 查询 - 寻找替代供应商(关系部门),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14318572/