我试图让递归查询与定义的起点一起工作。
下面是我表中一些名为Part_v_Container的示例数据
Serial_No From_Container Part_Key Part_Operation_Key
1234 1233 5678 5
1233 1232 5678 4
1231 1230 5678 3
1230 NULL 5678 2基本上,我们发送了一个序列号,然后我需要跟踪它,在整个过程中跟踪所有以前的序列号From_Container。在我的实际查询中,我将让启动的Serial_No是一个用户定义的变量。
以下是我的尝试:
;WITH Recursive_cte AS
(SELECT
PContainer.Serial_No
,PContainer.From_Container
,PContainer.Part_Key
,PContainer.Part_Operation_Key
FROM Part_v_Container AS PContainer
WHERE Serial_No LIKE '1234' -- Will be user defined variable
UNION ALL
SELECT
PContainer.Serial_No
,PContainer.From_Container
,PContainer.Part_Key
,PContainer.Part_Operation_Key
FROM Recursive_cte
INNER JOIN
Part_v_Container AS PContainer
ON PContainer.From_Container = Recursive_cte.Serial_No
)
SELECT *
FROM Recursive_cte然而,这只返回一行,即Serial_No = 1234行。我的真实数据集有数千个序列号,我需要能够从中选择哪些序列号进行追溯,而不是对表中的每个查询都进行递归的广泛查询。
我试着阅读了几篇文章和一些示例,以使其发挥作用,包括一个没有成功的这里。
提前谢谢你的帮助。
发布于 2018-07-03 19:18:04
你把连接字段倒过来了。
SQL Demo
;WITH Recursive_cte AS (
SELECT
PContainer.Serial_No
, PContainer.From_Container
, PContainer.Part_Key
, PContainer.Part_Operation_Key
FROM Part_v_Container AS PContainer
WHERE Serial_No = 1234 -- Will be user defined variable
UNION ALL
SELECT
PContainer.Serial_No
, PContainer.From_Container
, PContainer.Part_Key
, PContainer.Part_Operation_Key
FROM Recursive_cte
INNER JOIN Part_v_Container AS PContainer
ON Recursive_cte.From_Container = PContainer.Serial_No
)
SELECT *
FROM Recursive_cte输出
| Serial_No | From_Container | Part_Key | Part_Operation_Key |
|-----------|----------------|----------|--------------------|
| 1234 | 1233 | 5678 | 5 |
| 1233 | 1232 | 5678 | 4 |https://stackoverflow.com/questions/51161051
复制相似问题