Oracle 10g PL/SQL Connect By Prior 返回同一行上的子级和父级

2024-03-31

Table1:

Child     Parent       a

Bob        Chris       2
Chris      Kate        1
Shane      Lana        3
Nala       Bob         4


Table2:

b           Talent      

1           'something'
2           'nothing'
3           'something'
4           'nothing'

SELECT  Child
FROM Table1
INNER JOIN Table2 ON (Table1.a =  Table2.b)
WHERE Table2.Talent = 'something'
connect by prior  Table1.Child =  Table1.Parent

此代码返回父行

Chris

如果不包含“Where”子句,代码将返回:

Bob
Chris
Kate

Chris
Kate

Shane
Lana

etc

我想要返回的是行中的以下内容,而不是列中的内容:

鲍勃·克里斯

其中 Chris 是一个有才华的人,并且是 Bob 的父母,因此代码不仅返回父母,而且还返回发起对该父母的查询的孩子,因此在这段代码中:

SELECT  Child
FROM Table1
INNER JOIN Table2 ON (Table1.a =  Table2.b)
WHERE Table2.Talent = 'something'
connect by prior  Table1.Child =  Table1.Parent

我会有具有天赋的孩子克里斯和发起寻找克里斯的前一个孩子鲍勃,所以假设如果鲍勃是加拉的孩子,而加拉是克里斯的孩子,我仍然只想在结果中得到鲍勃和克里斯。

条件:我没有创建临时表或任何类型的表的权限,因此我无法使用任何循环来执行此操作除非我只是不知道如何在没有临时表的情况下做到这一点

我不知道如何从“先前”语句之前返回一个孩子,而新的“孩子”实际上是前一个孩子的父母。


您所需要的只是使用connect_by_root http://docs.oracle.com/cd/B19306_01/server.102/b14200/operators004.htm#i1035022操作员。

我不确定查询目标(例如,如果父母没有才华,则返回或不返回有才华的祖父),但该运算符的用法可能如下所示:

select 
  originated_from_child, 
  found_ancestor, 
  is_ancestor_talented
from (
  select 
    CONNECT_BY_ROOT relations.child  originated_from_child,
    relations.parent                 found_ancestor,
    ( 
      select count(1) 
      from table2 
      where 
        b = a 
        and 
        talent = 'something' 
        and 
        rownum = 1
    )                                is_ancestor_talented
  from 
    table1 relations
  start with 
    relations.a in (
      select talents.b 
      from table2 talents 
      where talents.talent = 'something')
  connect by 
    prior relations.child = relations.parent
)
where 
  originated_from_child <> found_ancestor
  and
  is_ancestor_talented = 1

SQLFiddle 示例 http://www.sqlfiddle.com/#!4/c409c/8

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle 10g PL/SQL Connect By Prior 返回同一行上的子级和父级 的相关文章

随机推荐

  • 将枚举案例的关联值提取到元组中

    我知道如何使用 switch 语句提取枚举案例中的关联值 enum Barcode case upc Int Int Int Int case quCode String var productBarcode Barcode upc 8 1
  • CUDA全局内存事务的成本

    根据 CUDA 5 0 编程指南 如果我同时使用 L1 和 L2 缓存 在 Fermi 或 Kepler 上 则所有全局内存操作都使用 128 字节内存事务完成 但是 如果我仅使用 L2 则使用 32 字节内存事务 第 F 4 2 章 让我
  • 建议在 C#.NET 中加密 XML 文件的最佳算法?

    我必须加密 XML 文件并通过网络发送到私人服务器中 我的另一个应用程序将通过提供实际的公钥来解密文件并将其导入到 SQL 你能建议我最好的方法吗 File XML类型 可能的尺寸 最大 250 MB 技术 C NET 2008 Use X
  • YUI 压缩机和 .NET 应用程序

    我想使用 YUI Compressor 原始版本 并将其用作典型 MS 构建过程 Visual Studio 2008 MSBuild 的一部分 有人对此有任何指导或想法吗 例如 合并到项目中的好方法 如何处理现有的 CSS 和 JS 引用
  • 尝试拟合 CrossValidator 对象时 DataBricks PySpark 出错

    首先 我是 DataBricks 和 PySpark 的新手 所以如果这是我没有看到的简单解决方案 我深表歉意 我的集群位于 DataBricks 运行时 9 1 LTS Spark 3 1 2 Scala 2 12 上 我正在研究一个 N
  • 在 Perl 中如何使用变量作为变量名?

    我需要在 perl 中实现以下目标 printmsg val1 msg1 if val1 printmsg val2 msg2 if val2 printmsg val3 msg3 if val3 printmsg val4 msg4 if
  • return 语句之前/期间的 C 分段错误

    我在 return 语句之前打印要返回的值 并告诉我的代码打印在函数调用之后立即返回的值 但是 在第一个打印语句之后和第二个打印语句之前 我遇到了分段错误 还值得注意的是 这种情况总是发生在第三次调用该函数时 从来没有第一次或第二次 也从来
  • 修改访客的捆绑属性

    我应该如何从访问者内部修改顶点的捆绑属性 我想使用对图进行子脚本化的简单方法 但传递给访问者的图参数是 const 因此编译器不允许更改 我可以在访问者中存储对图表的引用 但这看起来很奇怪 A visitor which identifie
  • 计算 Java 对象的值?

    我有一个用于存储项目的 Java 对象 public class PaymentDetailsItem private String name private String amount private int quantity priva
  • 在 Excel5.php 中找不到类“PHPExcel”

    我在 PHPExcel 中收到以下错误 Fatal error Class PHPExcel not found in PHPExcel Reader Excel5 php on line 587 这很奇怪 因为我在网上搜索时没有遇到过它
  • 尽管 rake 路线中有一条路线,但没有路线匹配

    我变得奇怪ActionController RoutingError No route matches 可以生成路线 gt r Rails application routes gt r generate controller items
  • 通用语言对 PCRE(Perl 兼容正则表达式)有哪些支持?

    我对 PCRE Perl 兼容正则表达式 的强大功能很感兴趣 并且想知道它们是否有可能成为所有主要语言中事实上的方法 我对 Java 感兴趣 如果有必要 我准备使用图书馆 我也无法在 SO 中找到一个很好的页面来描述 PCRE 的优缺点 因
  • Web 服务存根生成 + android

    我想生成一个基于 android java 的 STUB 来访问所有 Web 服务 我尝试使用以下工具生成存根 1 用于 CLDC 的 Sun Java TM 无线工具包 2 5 2 01 2 ksoap2 生成 stub 0 1 SNAP
  • 我可以使用特征稀疏矩阵来满足一般存储需求吗

    我需要一个模板化的稀疏矩阵实现 但只是为了减少内存占用 not进行任何数值求解 所以我尝试使用 Eigen 尽管我不需要数学部分 为什么 它恰好就在我的机器上 而且我已经用它来做其他事情了 但我肯定不是本征专家 Context 我有一个类型
  • 使用 LINQ 查询初始化 List

    我正在初始化一个List
  • Perl chomp 将多位数字变成 1 或 0

    我遇到一种情况 我需要用 Perl 读取一个充满数字的文件 这本身工作得很好 但是当我尝试删除每一行时 它会将以前的 5 或 6 位数字变成 1 或 0 Ideas 我需要对数字进行咀嚼以将文件路径与它们组合起来 因此回车符是一个问题 你没
  • 如何从 BroadcastReceiver 发出通知?

    如何从 BroadcastReceiver 发出通知 不能使用大多数方法 也不能使用 this 我需要它来打开一个包含数据库信息的活动我已经做到了 但现在必须的方法不起作用 我不能使用 这个 In the onReceive方法你得到一个C
  • LibGDX 将 BitmapFont 绘制到中间位置(spritebatch)

    我想使用 BitmapFont 绘制一些文本 临时位置 然后绘制该位置的一部分 到最后的精灵批次 我当时正在考虑画画 到临时 spritebatch 但不可能 将 spritebatch 绘制到另一个上 我怎样才能做到这一点 您可以使用帧缓
  • C - 返回指向局部变量的指针的函数

    考虑以下代码 include
  • Oracle 10g PL/SQL Connect By Prior 返回同一行上的子级和父级

    Table1 Child Parent a Bob Chris 2 Chris Kate 1 Shane Lana 3 Nala Bob 4 Table2 b Talent 1 something 2 nothing 3 something