代码之家  ›  专栏  ›  技术社区  ›  PhilipGarnero

如何在使用外键引用自身的表中提取根元素?(循环?)

  •  0
  • PhilipGarnero  · 技术社区  · 6 年前

    例如,假设您有一个这样的餐桌上的人:

    Id  Name    Birthdate   Parent
    1   Hans    1960/10/15  null
    2   Svend   1985/01/23  1
    3   Peter   2004/03/02  2
    

    父级是人员表上的外键。
    我想从孩子一开始就回到最年长的父母身边。 例如,从Peter开始,是否可以在SQL中检索Hans?

    在起始行和结束行之间可能有几十个中间行。

    1 回复  |  直到 6 年前
        1
  •  1
  •   The Impaler    6 年前

    递归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