2010-11-15 117 views
4

我們如何在T-SQL中編寫遞歸sql查詢? 你可以舉一個這樣的遞歸sql查詢的簡單例子。遞歸sql查詢T-SQL

+0

@ user491518,你怎麼改變了接受的答案? – 2010-11-15 17:22:29

+0

我認爲@Jacques Bosch的答案更好。 – Pratik 2010-11-16 06:09:33

+0

@ user491518:夠公平的。 – 2010-11-16 07:40:26

回答

3
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 
5

這裏是一個自包含的例子。

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)