我有一个看起来像这样的表:
ID | PARENT_ID
--------------
0 | NULL
1 | 0
2 | NULL
3 | 1
4 | 2
5 | 4
6 | 3
作为一个SQL新手,我不确定是否可以在一个命令中完成我想要的事情。
我想从第6行开始,并使用PARENT_ID列引用ID列来递归地遵循“历史记录”。
(在我看来)结果应该类似于:
6|3
3|1
1|0
0|NULL
我已经尝试过这样的事情:
SELECT T1.ID
FROM Table T1, Table T2
WHERE T1.ID = 6
OR T1.PARENT_ID = T2.PARENT_ID;
但这给了我一个奇怪的结果。
答案 0 :(得分:0)
使用recursive cte
。
如果要从最大值id
开始,
with recursive cte (id, parent_id) as (
select t.*
from (
select *
from tablename
order by id desc
limit 1
) t
union all
select t.*
from tablename t inner join cte c
on t.id = c.parent_id
)
select * from cte
请参见demo。
如果要专门从id = 6
开始:
with recursive cte (id, parent_id) as (
select *
from tablename
where id = 6
union all
select t.*
from tablename t inner join cte c
on t.id = c.parent_id
)
select * from cte;
请参见demo。
结果:
| id | parent_id |
| --- | --------- |
| 6 | 3 |
| 3 | 1 |
| 1 | 0 |
| 0 | |