T-SQL:按类别筛选,包括Subs

时间:2013-03-13 15:56:43

标签: tsql sql-server-2008-r2

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

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

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

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

我确定很多人以前遇到过这个问题,但我无法想到要解决的问题。感谢帮助。感谢

1 个答案:

答案 0 :(得分: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