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;