如何在sql server中获取存在于多个类别的产品

时间:2014-03-17 03:14:55

标签: sql-server-2008 tsql

我有3个表,即产品,类别和productTocategory

现在我的要求是我要查看存在于多个类别中的产品。

我没有正确形成t-sql。

任何人都可以帮我构建查询,下面是我的表结构。

  1. 产品表包含所有生产信息。 (ProductId,Name,Description ..等)
  2. 类别表有类别和产品信息(CategoryId,Name等)
  3. ProductToCategory包含产品和类别信息(ProductToCategoryID,CategoryID,ProductID)

1 个答案:

答案 0 :(得分:2)

您必须聚合多对多联接表。然后,您可以通过多种方式使用它来获取所需的关联产品信息。

例如:

CREATE TABLE Product (ProductId INT, Name VARCHAR(10))
CREATE TABLE Category(CategoryId INT, Name VARCHAR(10))
CREATE TABLE ProductToCategory (ProductToCategoryID INT, CategoryID INT, ProductID INT)

GO

INSERT INTO Product VALUES (1,'prod_1'),(2,'prod_2')
INSERT INTO Category VALUES (1,'cat_1'),(2,'cat_2')
INSERT INTO ProductToCategory VALUES (0,1,1),(1,2,1),(1,1,2)

GO 
SELECT p.* 
      ,a.CatCount
  FROM Product p
       INNER JOIN (
         SELECT ProductID 
               ,COUNT(CategoryId) CatCount
           FROM ProductToCategory 
          GROUP BY ProductID 
         HAVING COUNT(*) > 1
        ) a ON p.ProductId = a.ProductId

GO

DROP TABLE Product 
DROP TABLE Category
DROP TABLE ProductToCategory