扎根&给定Id的叶节点 - 如何?

时间:2010-08-16 01:08:18

标签: sql database mysql

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

=================
| 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.

1 个答案:

答案 0 :(得分:2)

  

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

这很简单,那就是ParentId!

您将通过以下查询获得孩子:

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

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

相关问题