Finding Top Level Parent ID

前端 未结 3 1608
挽巷
挽巷 2021-01-28 10:10

In one table I have two columns like below

ID  ParentID
1   0x0
2   1
3   2
9   0x0
5   9
6   5
25  0x0
30  25

How to get top level parent ID

3条回答
  •  梦如初夏
    2021-01-28 10:32

    Yet another shorter CTE :

    WITH cte AS(
          SELECT *, id AS topparent 
          FROM t 
          WHERE parentid IS NULL
      UNION ALL
          SELECT t.*, c.topparent 
          FROM t JOIN cte c ON c.id = t.parentid
          WHERE t.id <> t.parentid
    )
    SELECT * FROM cte
    

    Tested here : SQL Fiddle


    EDIT : This damn SQLfiddle is unresponsive again. Test DDL Code below

    CREATE  table t (id INT, parentid INT);
    INSERT INTO T VALUES (1  , NULL );
    INSERT INTO T VALUES (2  , 1    );           
    INSERT INTO T VALUES (3  , 2    );          
    INSERT INTO T VALUES (9  , NULL );          
    INSERT INTO T VALUES (5  , 9    );          
    INSERT INTO T VALUES (6  , 5    );          
    INSERT INTO T VALUES (25 , NULL );          
    INSERT INTO T VALUES (30 , 25   );
    

提交回复
热议问题