2

SQL の質問: 2 つの列を持つテーブルがあります:ProductIdCatId

渡されたすべての s に属する製品を選択したいと考えていますCatId

たとえば、これは私のテーブルです:

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

合格した場合2,3,4、結果は になります1129

私が合格した場合2,3、結果は1130(1129ではなく、渡されたすべてのCatIdsに属している必要があるため、それ以下でもそれ以上でもありません)

これをどのように達成できるか考えていますか? INでは動作しANDません。INではOR目的を果たしません。

ありがとう。

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 に答える