sql-server - 具有定义起点的递归 SQL 查询
问题描述
我试图让递归查询与定义的起点一起工作。
这是我表中的一些示例数据,名为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
行。我的真实数据集有数以千计的序列号,我需要能够从中挑选出哪些序列号进行追溯,而不是对表中的每个序列号进行递归的广泛查询。
我已经尝试阅读几篇文章和示例以使其正常工作,包括此处没有成功的文章。
预先感谢您的帮助。
解决方案
您将连接字段倒置。
;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 |
推荐阅读
- node.js - 收到有关 nodemon 事件(错误、重启)的电子邮件?
- gulp - 使用 gulp 合并多个 less 文件并转换为 css
- anylogic - 如何使用带有 AnyLogic 的 distanceByRoute 计算车辆行驶的距离?
- cors - 使用 AutoSuggest API 时出现 CORS 策略错误
- javascript - 比较字符串中的非英文字符
- c# - 按类属性的接近程度对列表项进行分组,并具有一定的阈值
- gradle - 如何遍历 Gradle 中所有已注册的任务?
- rust - 为什么 VecDeque 的尾部成员指向第一个元素而不是最后一个元素?
- swift - 在 Swift (macOS) 中控制背景音乐
- reactjs - Normalizr + react-virtualized:如何在 react-virtualized 中使用规范化的数据对象?