如何在一个SQL查询中获取任意递归深度的祖先id?

时间:2011-12-26 18:29:06

标签: mysql sql

表格

    id  parent_id
    --------------
    a_1 NULL
    a_2 NULL
    b_1 a_1
    c_1 b_1
    d_1 c_1

现在,我有id:d_1

如何在一个SQL查询中获得a_1b_1c_1? (d_1的祖先ids)?

2 个答案:

答案 0 :(得分:2)

SELECT c.id, b.id, a.id 
FROM T 
INNER JOIN T AS c on T.parent_id=c.id 
INNER JOIN T AS b ON c.parent_id = b.id 
INNER JOIN T as a ON b.parent_id = a.id

假设您的表名为T.未经测试。不确定如果d没有三个父母会发生什么,可能你没有得到一个东西,可能会尝试LEFT JOIN为那些情况获得伟大父母的NULL值。此外,最后的JOIN并不是必需的,因为你可以简单地选择b.parent_id而不是a.id,但是,你知道,只是为了把模式带回家;)

答案 1 :(得分:1)

我真的认为你不能在一个简单的SQL语句中这样做,这是SQL语言的一个基本限制。

Here是一个令人发指的存储过程,大致可以执行您想要的操作(对于SQL Server)。所以你需要做这样的事情。