查找单表链中的最后一条记录 (SQL Server)

tje*_*ten 3 sql sql-server-2005 chaining

SQL Server 2005中得到这个表,用来维护合并操作的历史记录:

  • 列 FROM_ID (int)
  • TO_ID 列(整数)

现在我需要一个将原始 FROM_ID 作为输入的查询,并返回最后一个可用的 TO_ID。

所以例如:

  • ID 1 合并到 ID 2
  • 稍后,ID 2 合并到 ID 3
  • 再后来,ID 3 合并到 ID 4

所以我试图组合的查询将作为输入(在我假设的 WHERE 子句中)ID 1,并且应该给我最后一个可用的 TO_ID 作为结果,在这种情况下为 4。

我想我需要一些递归逻辑,但真的不知道如何开始。

谢谢 !

马修

Lie*_*ers 5

使用CTE会起作用。

测试脚本

DECLARE @IDs TABLE (
  FromID INTEGER
  , ToID INTEGER
)

INSERT INTO @IDs
SELECT           1, 2 
UNION ALL SELECT 2, 3
UNION ALL SELECT 3, 4
Run Code Online (Sandbox Code Playgroud)

SQL语句

;WITH q AS (
    SELECT  FromID, ToID
    FROM    @IDs
    UNION ALL 
    SELECT  q.FromID, u.ToID
    FROM    q
            INNER JOIN @IDs u ON u.FromID = q.ToID
)
SELECT  FromID, MAX(ToID)
FROM    q
WHERE   FromID = 1
GROUP BY
        FromID           
Run Code Online (Sandbox Code Playgroud)