有一个表:组
它有三列:ID,NAME,PARENT
这将以下列方式流动。
数据库中的数据如下:
ID NAME PARENT
1 ELECTRONICS null
2 MOBILE ELECTRONICS
3 SAMSUNG MOBILE
4 16GB SAMSUNG
5 8GB SAMSUNG
可能有N级层次结构。我想检索最后一级的所有记录。 在这种情况下,返回16GB和8GB。
答案 0 :(得分:0)
解决此类问题的常用方法是递归查询。在Oracle中,这可以使用connect by
完成。
但是:要从 last 级别获取所有行,不需要递归查询。
这些都是parent
列中未显示的行:
select *
from Groups
where name not in (select parent
from groups g2
where g2.parent is not null);
SQLFiddle:http://sqlfiddle.com/#!4/df70d/1
递归查询可用于查找例如所有节点低于某个类别,例如如果你想找到SAMSUNG以下的所有内容:
select *
from groups
start with name = 'SAMSUNG'
connect by prior name = parent;