我的数据库中有以下表格:
Categories:
- Id (PK)
- ParentId (FK to Categories.Id)
- Name
Products:
- Id (PK)
- CategoryId (FK to Categories.Id)
- Name
我想编写一个查询来获取某个类别(给定类别ID)中的所有产品,包括它的子类别及其子类型等等。请注意,我使用的是SQL Server 2008 R2。
我确定很多人以前遇到过这个问题,但我无法想到要解决的问题。感谢帮助。感谢
答案 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