代码之家  ›  专栏  ›  技术社区  ›  Mathieu

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

  •  3
  • Mathieu  · 技术社区  · 16 年前

    • 来自\u ID(int)的列
    • 列到\u ID(int)

    现在我需要一个查询,它将原始的FROM\u ID作为输入,并返回最后一个可用的TO\u ID。

    例如:

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

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

    谢谢!

    2 回复  |  直到 16 年前
        1
  •  5
  •   Lieven Keersmaekers    16 年前

    使用 CTE 会有用的。

    测试脚本

    DECLARE @IDs TABLE (
      FromID INTEGER
      , ToID INTEGER
    )
    
    INSERT INTO @IDs
    SELECT           1, 2 
    UNION ALL SELECT 2, 3
    UNION ALL SELECT 3, 4
    

    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           
    
        2
  •  3
  •   Martin Smith    16 年前

    ;WITH q AS (
        SELECT  1 AS LEVEL, FromID, ToID
        FROM    @IDs
        WHERE FromID=1
        UNION ALL 
        SELECT  LEVEL + 1, q.FromID, u.ToID
        FROM    q
                INNER JOIN @IDs u ON u.FromID = q.ToID
    )
    
    SELECT TOP 1 ToID
     FROM q
    ORDER BY LEVEL DESC
    
    推荐文章