【问题标题】:Oracle Hierarchical Query - Get records in hierarchy where children are in a listOracle Hierarchical Query - 获取层次结构中的记录,其中子项位于列表中
【发布时间】:2015-04-29 16:56:50
【问题描述】:

我有一个父子关系的表。在另一个表上,我有一个成员列表,这些成员是第一个表中的叶子。

我想做的是让第一个表由第二个表中成员的父级成员或第二个表的成员过滤。我希望我的问题很清楚,如果没有,请询​​问。

数据库是Oracle 10g。

【问题讨论】:

  • 请显示表格的定义、每个表格的样本数据、预期输出以及您尝试过的内容。
  • 所以你想要所有的叶子和它们的父母?第二张桌子是干什么用的?

标签: sql oracle recursive-query


【解决方案1】:

假设您在表TH 和成员表TM 中有这个层次结构,有三行'GC Carl'、'PT Mike'、'PT Mary'(标记为绿色)。

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

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)

(Martin 被淘汰,因为他不是任何成员的父母,并且他不在TM)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多