SQL查询匹配列表中的所有值以进行评估

时间:2018-02-05 16:18:58

标签: sql sql-server tsql

我有一个名为SupplierCatalog(idProduct, idSupplier)的表格,我想查看供应商是否有产品清单,因为可以在一个或多个供应商中找到产品,例如:idproducts到用idsupplier(5)检查(10,26,40,42,50)。

我不知道从哪里开始,我试过

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

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

有没有人知道如何获得我想要的结果,如果所有匹配,我只需要一个TRUE或如果至少有一个匹配则FALSE

2 个答案:

答案 0 :(得分:9)

假设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) ...

答案 1 :(得分:7)

SELECT idproduct 
  FROM SupplierCatalog 
 WHERE idProduct IN (10, 26, 40, 42, 50) 
   AND idSupplier = 5 
 GROUP BY idproduct 
HAVING COUNT(*) = 5

0行为假,1行为真

您可以删除AND idSupplier = 5并获取所有供应商