【问题标题】:Hierarchical Query in Oracle SQLOracle SQL 中的分层查询
【发布时间】:2014-08-07 20:41:18
【问题描述】:

我有这样的数据:

从上表中,我尝试使用 connect by 子句编写 SQL 以获得这样的层次结构

      MAINCONTENT

       SPECIAL
        RIDGE
         SALESCONTENT

       ANOTHERONE
        RODGE
         SOMETHING ELSE
          ANOTHER
        ...

到目前为止,下面的这个 SQL 只显示了我所有的“MAINCONTENT”的孩子,但我想在不传递参数的情况下这样做。此外,下面的这个也没有向我展示 Children of Children,这意味着它没有进行递归。

    select DISTINCT parent from  MYTABLE
    connect by prior CHILD = PARENT
    start with PARENT = 'MAINCONTENT';

【问题讨论】:

  • @Barmar 该链接用于 MySQL,它并没有真正展示如何使用 CONNECT BY
  • 糟糕,抱歉。我错误地记得它更通用。
  • 无论如何,您应该展示您尝试过的内容,以便人们可以帮助您修复它。 SO 不是为了让其他人为你编写代码。

标签: sql oracle hierarchy


【解决方案1】:

您似乎只显示了电子表格中的部分数据,所以我不确定以下内容是否 100% 正确,但是:

首先摆脱间接链接(直接链接应该覆盖整个树)并为顶级记录创建额外的条目。然后应用分层子句。

试试下面的:

WITH mytable_normalized AS (
  SELECT parent, child
    FROM mytable
   WHERE direct_link = 'Y'
   UNION ALL
  SELECT null, parent
    FROM mytable
   MINUS
  SELECT null, child
    FROM mytable
)
SELECT lpad(' ', level*2) || child
  FROM mytable_normalized
CONNECT BY prior child = parent
 START WITH parent IS NULL;

【讨论】:

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