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 に答える