首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过父/子层次结构的多个级别的SQL迭代

通过父/子层次结构的多个级别的SQL迭代
EN

Stack Overflow用户
提问于 2011-01-28 01:05:17
回答 1查看 2.6K关注 0票数 0

背景:我有3个MSSQLServer表: product,category,product_category_mapping。产品上方最多有5个类别级别,此数据保存在映射表中。我要做的是遍历产品,并针对每个产品类别级别,为该产品创建一个针对当前级别的新映射。

我从这个查询开始,并认为我可以通过将游标放在每个类别阶段来开发它,我将在每个类别阶段执行插入。刚开始的时候,我发现很难让自己头脑清醒,现在我在想,这是不是最好的方法--有人能告诉我更好的方法吗?

代码语言:javascript
运行
复制
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)))))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-28 01:09:36

如果是Microsoft SQL Server,您可以尝试使用CTE (Common Table Expressions) for recursive queries

如果它是PostgreSQL,那么您也可以使用support for recursive queries

Here's如何在Oracle中实现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4819462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档