【问题标题】:hierarchical query with info about on which value is based on分层查询,其中包含有关哪个值基于的信息
【发布时间】:2015-12-02 16:14:26
【问题描述】:

我正在尝试编写一个分层代码,除了所有子/父帐户之外,它还将显示一个包含一个帐户的列,该帐户的 ID 来自表 TO_DELETE,此帐户(子/父)基于该帐户。 换句话说:您根据表 TO_DELETE 中的哪个帐户显示父/子帐户?

我的代码看起来:

WITH acc_to_delete( ID ) AS (
                            select parentaccount from account where accountid in                                          
                                 (select accountid from to_delete )
                          )
                          SELECT accountid id_acc
                          FROM   account p
                          START WITH
                            EXISTS( SELECT 'X'
                                    FROM   to_delete w
                                    WHERE  p.accountid = w.accountid
                                    )
                          CONNECT BY accountid = PRIOR parentaccount
                          union
                          SELECT accountid id_acc
                          FROM   account p
                          START WITH
                            EXISTS( SELECT 'X'
                                    FROM   to_delete w
                                    WHERE  p.accountid = w.accountid
                                    )
                          CONNECT BY prior accountid = parentaccount

它似乎工作正常。结果我得到了一个树帐户。至少我认为:)

CREATE TABLE to_delete 
( accountid number);
CREATE TABLE account
( accountid number,
  parentaccount number)

所以现在当 to_delete 表包含数据时:

 3123,
  3443,
  5646,
  7563,
  3452,
  2346

账户包含:

Accountid   parentaccount
  3123          5533
  3443          3452
  5646          4342
  7563          1239
  3452          5533
  2346          1230
  5533          6474
  6474          1231
  1231          1293
  1293          null

那么输出应该是这样的:

accountid  based on
      3123   3123       
      5533   3123      
      6474   3123
      1231   3123
      1293   3123
      3443   3443 
      3452   3443 
      6474   3443
      1231   3443
      1293   3443
      5646   5646
      4342   5646
      7563   7563

等等.. 可以用 SQL 做吗?还是我需要使用pl sql?

【问题讨论】:

    标签: sql oracle hierarchical


    【解决方案1】:

    了解“CONNECT_BY_ROOT”运算符:
    http://docs.oracle.com/cd/B19306_01/server.102/b14200/operators004.htm#i1035022

    例如在这个查询中:

    SELECT p.accountid, CONNECT_BY_ROOT p.accountid as based_on
    FROM   account p
    START WITH p.accountid IN (select accountid from to_delete)
    CONNECT BY accountid = PRIOR parentaccount
    

    对于查询 CONNECT_BY_ROOT p.accountid 返回的每一行,将从根行返回一个值 accountid(换句话说 - 从一个符合 START WITH 条件的行作为层次结构的起始行)。

    【讨论】:

    • 感谢 kordirko ! :) 我还有一个问题,你能看看我的分层查询代码吗?我认为没关系,但重复存在一些问题,我不确定我是否正确...
    猜你喜欢
    • 1970-01-01
    • 2021-06-02
    • 2016-02-25
    • 1970-01-01
    • 2012-10-31
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多