Sql 如何在使用外键引用自身的表中提取根元素?(循环?)
例如,假设您有一个像这样的人:Sql 如何在使用外键引用自身的表中提取根元素?(循环?),sql,postgresql,loops,Sql,Postgresql,Loops,例如,假设您有一个像这样的人: Id Name Birthdate Parent 1 Hans 1960/10/15 null 2 Svend 1985/01/23 1 3 Peter 2004/03/02 2 Parent是Person表上的外键。 我想一路回到最年长的父母身边,从一个孩子开始。 例如,从Peter开始,是否可以在SQL中检索Hans 在起始行和结束行之间可能有几十个中间行。递归CTE(递归公共表表达式)将执行您想要的操作: wit
Id Name Birthdate Parent
1 Hans 1960/10/15 null
2 Svend 1985/01/23 1
3 Peter 2004/03/02 2
Parent是Person表上的外键。我想一路回到最年长的父母身边,从一个孩子开始。 例如,从Peter开始,是否可以在SQL中检索Hans 在起始行和结束行之间可能有几十个中间行。递归CTE(递归公共表表达式)将执行您想要的操作:
with recursive
x as (
select *, 1 as my_level from my_table where id = 3 -- Peter's id
union all
select
t.*, x.my_level + 1
from my_table t
join x on x.parent = t.id
)
select * from x order by my_level desc limit 1
我删除了不兼容的数据库标记。请标记您真正使用的数据库。是的,这是可能的。尝试使用递归方法。