我有一个表SupplierCatalog (idProduct, idSupplier)。一个产品可以由多个供应商提供;供应商提供多种产品(多对多关系)。

我想检查供应商是否提供了列表中的所有产品,例如,要检查的产品是(10, 26, 40, 42, 50),而供应商是5

我试过了:

SELECT idproduct
FROM SupplierCatalog
where idProduct IN (10, 26, 40, 42, 50) AND idSupplier = 5

然后在C#中检查返回的行数是否等于查询中传递的产品数,它可以工作,但对我来说看起来并不专业。

有谁知道如何获得我想要的结果的线索,如果所有都匹配,我只是一个TRUE,如果至少一个不匹配,我只是一个FALSE

最佳答案

假设idProduct, idSupplier是唯一的*,这是一个简单的查询:

SELECT 1
FROM SupplierCatalog
WHERE idProduct IN (10, 26, 40, 42, 50) AND idSupplier = 5
HAVING COUNT(*) = 5 -- this is the number of items in the above list

这将返回0或1行,这是您需要检入代码的全部。

*如果允许/存在重复项,请更改为HAVING COUNT(DISTINCT idProduct) ...

关于sql - 确定供应商是否供应 list 中的所有产品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48626892/

10-12 05:26