2

SQL问题:我有两列的表:ProductIdCatId

我想选择属于所有传入CatIds的产品。

例如这是我的表:

ProductID        CatID
_____________________
1129                2
1129                3
1129                4
1130                2
1130                3

现在,如果我通过2,3,4结果应该是1129.

如果我通过2,3结果应该是1130(不是 1129,因为它应该属于所有通过的 CatId,不少于 - 不多)

知道如何实现吗?不能工作IN。with不会达到目的。ANDINOR

谢谢。

4

2 回答 2

3
SELECT ProductID
FROM Table1 a
WHERE CatID IN (2,3)
GROUP BY ProductID
HAVING COUNT(*) =
        (
          SELECT COUNT(*)
          FROM table1 b
          WHERE b.ProductID = a.ProductID
        ) AND 
        COUNT(*) = 2
于 2012-11-13T12:38:10.080 回答
-1

诀窍是查看产品属于多少类别,按 productId 分组,然后使用HAVING类别的较小子集过滤结果

SELECT ProductID, COUNT(*) as c FROM table WHERE CatID IN(2,3,4) GROUP BY ProductID HAVING c = 3
于 2012-11-13T12:35:05.677 回答