Oracle分层查询 - 获取子级列表中的子级的记录

时间:2015-04-29 16:56:51

标签: sql oracle recursive-query

我有一张包含父母,子女关系的表格。在另一个表中,我有一个成员列表,它们是第一个表中的叶子。我想要做的是让第一个表由成员过滤,这些成员是第二个表中成员的父成员,或者是第二个表的成员。我希望我的问题很清楚,如果不是,请问。

数据库是Oracle 10g。

1 个答案:

答案 0 :(得分:2)

我们假设您在表TH和成员表TM中有此层次结构,有三行' GC Carl' PT Mike&# 39;,' PT Mary' (标记为绿色)。

enter image description here

要找到他们所有的父母,祖父母等(标记为黄色),您需要这个简单的分层查询:

select distinct id
  from th
  connect by id = prior pid
  start with id in (select id from tm)

SQLFiddle demo

如果您只是寻找父母,而您需要以分层方式进行,那么:

select distinct id
  from th
  connect by id = prior pid and level <= 2
  start with id in (select id from tm)

(马丁被淘汰,因为他不是任何成员的父母而且他在TM缺席。)

如果这不是你想要的,你绝对应该精确查询,添加样本输入数据和所需的输出。