我试图获取一个递归查询,以使用定义的起点。
这是我的表中的一些示例数据,称为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
行。我的真实数据集具有成千上万的序列号,我需要能够选择从中进行追溯的序列号,而不是对表中的每个序列都进行递归的广泛查询。
我尝试阅读几篇文章和示例来使它起作用,其中包括一本here,但没有成功。
预先感谢您的帮助。
答案 0 :(得分:1)
您将联接字段颠倒了。
#
输出
;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