Oracle - Tree like query

时间:2015-11-22 16:16:24

标签: sql oracle oracle11g recursive-query connect-by

有一个表:组

它有三列:ID,NAME,PARENT

这将以下列方式流动。

  • 假设有一个Group ELECTRONICS
  • 在ELECTRONICS下,有MOBILE
  • 在MOBILES下有SAMSUNG
  • 在SAMSUNG下有GALAXY EDGE
  • 在GALAXY EDGE下有16GB和8GB

数据库中的数据如下:

ID             NAME                  PARENT
 1          ELECTRONICS               null
 2            MOBILE               ELECTRONICS
 3           SAMSUNG                 MOBILE
 4             16GB                  SAMSUNG
 5              8GB                  SAMSUNG

可能有N级层次结构。我想检索最后一级的所有记录。 在这种情况下,返回16GB和8GB。

1 个答案:

答案 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;