2011-01-27 52 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? – 2011-01-27 17:07:42

+0

你使用什么数据库? – 2011-01-27 17:07:55

回答

相关问题