sql severs 递归查询

在sqlsevers 里面 WITH RECURSIVE 语句(在SQL Server中,通常使用 WITH 语句的公用表表达式(CTE)来实现递归查询),来处理这类查询

假设你有一个简单的BOM表结构,它可能包括以下几个字段:

  • BOM_ID:BOM的唯一标识符。
  • Product_ID:最终产品的ID。
  • Component_ID:构成该产品的部件或组件的ID。
  • Quantity:每个最终产品所需该部件或组件的数量。
  • Level:可选,表示部件在BOM中的层级(例如,直接部件为1,子部件的部件为2,依此类推)
  • 以下是一个使用CTE进行递归查询的示例,以检索给定产品的完整BOM树:
  • WITH RECURSIVE BOM_CTE AS (
        SELECT
            BOM_ID,
            Product_ID,
            Component_ID,
            Quantity,
            LEVEL,
            CAST (
            '' AS VARCHAR ( MAX )) AS Path 
        FROM
            BOM 
        WHERE
            Product_ID = 100 -- 假设我们从最终产品ID为100的产品开始
            UNION ALL-- 递归成员
        SELECT
            b.BOM_ID,
            b.Product_ID,
            b.Component_ID,
            b.Quantity,
            b.Level,
            CAST (
            cte.Path + '->' + CAST ( b.Component_ID AS VARCHAR ) AS VARCHAR ( MAX )) 
        FROM
            BOM_CTE cte
            INNER JOIN BOM b ON cte.Component_ID = b.Product_ID 
        ) SELECT
        * 
    FROM
        BOM_CTE 
    ORDER BY
        Path;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值