具有定义起点的递归 SQL 查询
Recursive SQL Query with Defined Start Point
我正在尝试使用定义的起点进行递归查询。
这是我的 table 的一些示例数据,名为 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
然而这只有returns排,Serial_No
=1234
排。我的真实数据集有数以千计的序列号,我需要能够从中挑选出要追溯的序列号,而不是对 table.
中的每个序列号进行递归的广泛查询
我已经尝试阅读几篇文章和示例来使它起作用,包括那一篇 here 但没有成功。
提前感谢您的帮助。
您颠倒了连接字段。
;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 |
我正在尝试使用定义的起点进行递归查询。
这是我的 table 的一些示例数据,名为 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
然而这只有returns排,Serial_No
=1234
排。我的真实数据集有数以千计的序列号,我需要能够从中挑选出要追溯的序列号,而不是对 table.
我已经尝试阅读几篇文章和示例来使它起作用,包括那一篇 here 但没有成功。
提前感谢您的帮助。
您颠倒了连接字段。
;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 |