【问题标题】:How CONNECT BY in subquery works子查询中的 CONNECT BY 的工作原理
【发布时间】:2014-02-26 04:51:52
【问题描述】:

我有如下查询

select substr( 'ORACLE DEVELOPER',level,1 ) ITEM
from dual connect by level <= length('ORACLE DEVELOPER') ;

它返回“O”作为结果。

但如果我将它作为子查询放在 other 中,它会显示所需的输出。 查询如下。

select a.ITEM from (select substr( 'ORACLE DEVELOPER',level,1 ) ITEM
from dual connect by level <= length('ORACLE DEVELOPER') ) a

此 CONNECT BY 如何在子查询中工作。 我是这个功能的新手。谁能解释一下?

【问题讨论】:

标签: oracle


【解决方案1】:

CONNECT BY 是用于执行分层查询的 Oracle SQL 语法。一些很好的例子是here

其中一个副作用是它允许您多次查询单个数据源,这意味着有一个方便的技巧可以生成任意数量的行:

SELECT 1
FROM dual
CONNECT BY LEVEL <= 10;

上面将把 dual 连接回自身 10 次 - LEVEL 伪列来自层次结构;因为 CONNECT BY 子句实际上并不引用行源中的任何数据,它有效地使 dual 成为自己的子、孙、曾孙等,直到 CONNECT BY 子句评估为 false(在这种情况下,当 LEVEL 变得更大超过 10 个)。

在您的情况下,您正在为字符串的每个字母生成一行(而不是 10,您指的是 LENGTH('a string'),这是让查询为每个字母返回一条记录的好方法字符串中的字母。然后您正在使用 SUBSTR 从字符串中挑选出第 n 个字母。

【讨论】:

    猜你喜欢
    • 2012-09-13
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多