sql – 获取给定ID的根和叶节点 – 如何?

假设我有一个具有以下结构的表:

=================
| Id | ParentId |
=================
| 1  | 0        |
| 2  | 1        |
| 3  | 1        |
| 4  | 2        |
| 5  | 2        |
| 6  | 3        |
| 7  | 3        |
-----------------

这导致像这样的树:

     1
    / \
  2     3
 / \   / \
4   5 6   7

给定一个id,我如何获得所有叶节点?因此,如果给定的id为2,则返回值应为4& 5.给定的id永远不会是叶子节点本身.

我不知道如何在这里修改SQL:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

SELECT t1.name FROM
category AS t1 LEFT JOIN category as t2
ON t1.category_id = t2.parent
WHERE t2.category_id IS NULL;

EDIT1:另外,如何获取给定id的root id?因此,如果给定的id为2,则返回值应为1.

最佳答案

“Also, how do I get the root id for a given id? So, if the given id is 2, the return should be 1.”

这很简单,那就是ParentId!

您将通过以下查询获取子项:

SELECT child.Id FROM theTable current LEFT JOIN theTable child ON child.ParentId = current.Id;

顺便说一下,当行没有父级时,我不建议使用0,在这种情况下我宁愿使用NULL.

点赞