Oracle-类似树的查询



有一个表:Groups

它有三列:ID、NAME、PARENT

这将以以下方式流动。

  • 假设有一个电子集团
  • 在ELECTRONICS下,有MOBILE
  • 在MOBILES下有三星
  • 三星旗下有银河边缘
  • 在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。

解决此类问题的常用方法是递归查询。在Oracle中,这可以使用connect by来完成。

但是:要从最后级别获取所有行,不需要递归查询。

这些都是未出现在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


递归查询可用于查找某个类别下的所有节点,例如,如果您想查找三星以下的所有节点:

select *
from groups
start with name = 'SAMSUNG'
connect by prior name = parent;

相关内容

  • 没有找到相关文章

最新更新