1

Product Category と ProductCategory の 3 つのテーブルがあります。

製品表:

ProductID ProductName
1             P1
2             P2
3             P3

カテゴリ表:

CategoryID CategoryName
1              C1
2              C2
3              C3

製品カテゴリ:

ProductID CategoryID
1            1
1            2
1            3
2            3
3            1
3            2

複数のカテゴリに該当する製品を返すクエリが必要です。上記のテーブル データに基づくと、結果は次のようになります。

ProductID     ProductName
    1             P1
    3             P3  

そこで、以下のように、複数の CategoryID を持つすべての ProductID を取得するクエリを作成しました。

select ProductID,count(CategoryID)    
from ProductCategory   
group by Productid   
having count(CategoryID)>1)  

しかし、以下のクエリを使用して製品の詳細を表示しようとすると、エラーが発生します。

select *
from Product
where ProductID in (
    select ProductID,count(CategoryID)  
    from ProductCategory 
    group by Productid 
    having count(CategoryID)>1))

私のクエリは間違っていますか?複数のカテゴリに該当する必要な製品の詳細を取得するにはどうすればよいですか?

4

2 に答える 2

6

COUNT()サブクエリで を削除します。句で使用される場合、サブクエリの結果には、IN返される列が 1 つだけ含まれている必要があります。

SELECT  *
FROM    Product
WHERE   ProductID IN 
        (
            SELECT  ProductID
            FROM    ProductCategory
            GROUP   BY Productid
            HAVING  count(CategoryID) > 1
        ) 

または使用してJOIN

SELECT  a.*
FROM    Product a
        INNER JOIN 
        (
            SELECT  ProductID
            FROM    ProductCategory
            GROUP   BY Productid
            HAVING  count(CategoryID) > 1
        ) b ON a.ProductID = b.ProductID
于 2013-04-05T13:17:20.547 に答える