几个假设。PID 是当前记录的父 ID,您知道类别 2 的 ID。
在本例中,我将使用 245 作为类别 2 的 id。如果您无法获取起始类别的唯一 ID,那么这将是一个不同的问题,必须在您的数据中解决。
(我昨天对另一个问题给出了类似的答案,进行了自下而上的查询。自下而上和自上而下之间的区别在于之前的语句中连接的 col1 = col2 的顺序。)
使用分层查询。
select Lpad(Name,Length(Name) + LEVEL * 10 - 10,'-') Name
from Category
start with id = 245
connect by prior id = pid;
这是一个sqlFiddle。
============编辑===============
现在添加了这个,因为我更清楚你需要什么。
select Lpad(Name,Length(c1.Name) + LEVEL * 10 - 10,'-') Name
from Category c1
start with c1.name = 'Category 2'
and c1.id in (select c2.pid from category c2 where c2.name = 'Category 3')
connect by prior c1.id = c1.pid;
这将为您提供以类别 2 开头的所有分支,并将类别 3 作为下一个子项。
我添加了另一个带有 2 / 5 关系的附加分支的sqlFiddle,因此您可以看到它只返回两个 2 /3 分支。