0

我的数据库中有以下表格:

Categories:
- Id (PK)
- ParentId (FK to Categories.Id)
- Name

Products:
- Id (PK)
- CategoryId (FK to Categories.Id)
- Name

我想编写一个查询来获取一个类别中的所有产品(给定一个类别 ID),包括它的子类别及其子类别等。请注意,我使用的是 SQL Server 2008 R2。

我相信很多人以前都遇到过这个问题,但我想不出要寻找什么来解决。感谢帮助。谢谢

4

1 回答 1

0

您可以使用Common Table Expressions进行类似递归的查询。

WITH CategoryHierarchy (CategoryId, ParentId) AS
(
  SELECT Id, ParentId FROM Categories
  -- This is the categoryId:
  WHERE Id = 1

  UNION ALL

  SELECT c.Id as CategoryId, c.ParentId
  FROM Categories c
  INNER JOIN CategoryHierarchy cr ON cr.CategoryId = c.ParentId

)
SELECT * FROM Products p
WHERE p.CategoryId IN (SELECT c.CategoryID FROM CategoryHierarchy c)

该解决方案的 SqlFiddle:http ://sqlfiddle.com/#!6/a0910/1

于 2013-03-13T16:08:52.620 回答