Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
递归sql查询T-sql_Sql_Tsql - Fatal编程技术网

递归sql查询T-sql

递归sql查询T-sql,sql,tsql,Sql,Tsql,如何在T-sql中编写递归sql查询? 你能给出这样一个递归sql查询的简单例子吗。这里是一个自包含的例子 CREATE TABLE ATable (ID INTEGER, ParentID INTEGER) INSERT INTO ATable SELECT 1, NULL UNION ALL SELECT 2, 1 UNION ALL SELECT 3, 2 ;WITH q AS ( SELECT ID, ParentID FROM ATable UNION ALL

如何在T-sql中编写递归sql查询?
你能给出这样一个递归sql查询的简单例子吗。

这里是一个自包含的例子

CREATE TABLE ATable (ID INTEGER, ParentID INTEGER)

INSERT INTO ATable 
SELECT 1, NULL
UNION ALL SELECT 2, 1
UNION ALL SELECT 3, 2

;WITH q AS (
  SELECT  ID, ParentID
  FROM    ATable
  UNION ALL 
  SELECT  a.ID, a.ParentID
  FROM    ATable a
          INNER JOIN q ON q.ID = a.ParentID
)
SELECT  DISTINCT *
FROM    q
Declare @Temp table
(
    ID int,
    ParentID int,
    Happened date,
    Value int
)
Insert into @Temp Values
    (1, null, dateadd(day,1,GetDate()),1),
    (2, 1, dateadd(day,2,GetDate()),2),
    (3, 1, dateadd(day,3,GetDate()),3),
    (4, null, dateadd(day,4,GetDate()),10),
    (5, 3, dateadd(day,5,GetDate()),50),
    (6, 4, dateadd(day,5,GetDate()),50),
    (7, 5, dateadd(day,5,GetDate()),90);
----------------------------------------

with Magic as
(
    select *
    from @Temp
    Where ID = 1

    union all

    select t.*
    from
        Magic m
        inner join
        @Temp t
            on t.ParentID = m.ID
)

select * from Magic
option (maxrecursion 3)

@用户491518,你怎么改变了被接受的答案?我认为@Jacques Bosch的答案更好。