抱歉我的英文。
表Category
:
ID
PID
name
层次结构:
可以重复类别名称。如何根据要求找到所有孩子:oracle的“2类和3类”?
结果应为:
==已更新==
我需要找到名字“类别2和类别3”,因为类别名称可能会重复!
答案 0 :(得分:0)
有几个假设。 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类作为下一个孩子。
我添加了另一个sqlFiddle,其中一个额外的分支具有2/5关系,因此您可以看到它只返回两个2/3分支。