2011-01-27 6 views
0

背景:私は3つのMSSQLServerテーブルを持っています:product、category、product_category_mapping。製品の上に5レベルまでのカテゴリがあり、このデータはマッピングテーブルに保持されています。 私がやりたいことは、製品とすべての製品カテゴリレベルで、現在のレベルに対してその製品の新しいマッピングを作成しても、繰り返し実行されます。いくつかのレベルの親/子階層を持つSQL反復

私はこのクエリを使い始めました。挿入を実行する各カテゴリステージにカーソルを置くことで開発できると思いました。いったん私が頭を抱くのが難しいと感じたら、これが最善の方法であるのかどうか疑問に思っています。

SELECT DISTINCT p.ProductId,p.name 
FROM Nop_Product p 
INNER JOIN Nop_Product_Category_Mapping cm ON p.ProductId = cm.ProductID 
INNER JOIN Nop_Category c ON cm.CategoryID = c.CategoryID 
WHERE c.CategoryID in (
    --next level 
    SELECT DISTINCT Nop_Category.CategoryID 
    FROM Nop_Product_Category_Mapping 
    INNER JOIN Nop_Category ON Nop_Product_Category_Mapping.CategoryID = Nop_Category.CategoryID 
    WHERE Nop_Category.ParentCategoryID in (
    -- next level 
     SELECT DISTINCT Nop_Category.CategoryID 
     FROM Nop_Product_Category_Mapping 
     INNER JOIN Nop_Category ON Nop_Product_Category_Mapping.CategoryID = Nop_Category.CategoryID 
     WHERE Nop_Category.ParentCategoryID in (
     -- next level 
      SELECT DISTINCT Nop_Category.CategoryID 
      FROM Nop_Product_Category_Mapping 
      INNER JOIN Nop_Category ON Nop_Product_Category_Mapping.CategoryID = Nop_Category.CategoryID 
      WHERE Nop_Category.ParentCategoryID in (
       -- next level 
       SELECT DISTINCT Nop_Category.CategoryID 
       FROM Nop_Product_Category_Mapping 
       INNER JOIN Nop_Category ON Nop_Product_Category_Mapping.CategoryID = Nop_Category.CategoryID 
       WHERE Nop_Category.ParentCategoryID in (
       --top level categories 
        SELECT Nop_Category.CategoryID 
        FROM Nop_Product_Category_Mapping 
        INNER JOIN Nop_Category ON Nop_Product_Category_Mapping.CategoryID = Nop_Category.CategoryID 
        WHERE Nop_Category.ParentCategoryID = 0))))) 
+1

RDBMSとは? MSSQLServer? –

+0

あなたはどのデータベースを使用していますか? –

+0

@Pabloからのコメントに加えて、いくつかのサンプルDDLとデータを投稿していますか? – codingbadger

答えて

関連する問題