1

我有一张这样的桌子

Id       Name        ReportingId
==
1        Stala       Null
2        Coma        1
3        Rita        1
4        Rosy        2
5        sss         4

我想要一个递归查询来查找单列中的所有报告 ID。

例如,对于 id 5,输出应始终为 null

4
2
1
null
4

2 回答 2

3

下面是一个使用递归公用表表达式 (CTE) 的示例:

; with  cte as
        (
        select  ReportingID
        from    YourTable
        where   id = 5
        union all
        select  yt.ReportingID
        from    YourTable yt
        join    cte
        on      cte.ReportingID = yt.id
        )
select  *
from    cte

SQL Fiddle 上的示例。

于 2012-04-18T11:05:16.913 回答
2

像这样的东西:

测试数据

DECLARE @T TABLE(Id int,Name VARCHAR(5),ReportingId INT)

INSERT INTO @T
VALUES
    (1,'Stala',Null),
    (2,'Coma',1),
    (3,'Rita',1),
    (4,'Rosy',2),
    (5,'sss',4)

询问

;WITH CTE
AS
(
    SELECT
        NULL AS Id,
        t.ReportingId
    FROM
        @T AS t
    WHERE
        t.Id=5
    UNION ALL
    SELECT
        t.Id,
        t.ReportingId
    FROM
        @T AS t
        JOIN CTE
            ON t.Id=CTE.ReportingId
)
SELECT
    CTE.Id
FROM
    CTE

结果

NULL
4
2
1
于 2012-04-18T11:06:28.917 回答