从表中获取根,内部和叶节点?

Ian*_*Ian 0 mysql binary-tree

给定一个节点表(它们的ID及其父ID),我如何获得所有的根,内部和叶节点?

这是我到目前为止的内容:

根节点

SELECT Id, "Root" FROM NodeTable
WHERE ParentId IS NULL;
Run Code Online (Sandbox Code Playgroud)

内部节点

???
Run Code Online (Sandbox Code Playgroud)

叶节点

SELECT N1.Id, "Leaf" FROM NodeTable N1
LEFT JOIN NodeTable N2 ON N1.Id = N2.ParentId
WHERE N2.ParentId IS NULL;
Run Code Online (Sandbox Code Playgroud)

它是否正确?有什么办法可以让我在一个查询中做到这一点?

小智 6

select  case 
        when p is null then concat(n, ' Root')
        when n in (select distinct p from bst) then concat(n, ' Inner')
        else concat(n, ' Leaf')
    end
from bst
order by n asc
Run Code Online (Sandbox Code Playgroud)

  • 您可能需要详细说明此答案。指出原始代码有什么问题以及如何更改。这将使其对将来的访客更加有用。 (2认同)