【问题标题】:Executing Hierarchical Query showing all data执行显示所有数据的分层查询
【发布时间】:2014-12-16 07:12:25
【问题描述】:

我正在尝试 Hierarchical select 在 oracle 中查询,但无法从那里得到想要的结果,并且不明白我是在写错误的查询还是我的表中有错误的数据?就像

I_ID    NAME    MGR_ID  LEVEL   PATH
1       SMITH       0    0      /SMITH
2       ALLEN       1    1      /SMITH/ALLEN
3       WARD        1    1      /SMITH/WARD
5       MARTIN      1    1      /SMITH/MARTIN
4       JONES       2    2      /SMITH/ALLEN/JONES
7       CLARK       2    2      /SMITH/ALLEN/CLARK
6       BLAKE       3    2      /SMITH/WARD/BLAKE
8       SCOTT       7    3      /SMITH/ALLEN/CLARK/SCOTT
9       KING        7    3      /SMITH/ALLEN/CLARK/KING
10      TURNER      8    4      /SMITH/ALLEN/CLARK/SCOTT/TURNER
12      JAMES       8    4      /SMITH/ALLEN/CLARK/SCOTT/JAMES
11      ADAMS       10   5      /SMITH/ALLEN/CLARK/SCOTT/TURNER/ADAMS
13      FORD        11   6      /SMITH/ALLEN/CLARK/SCOTT/TURNER/ADAMS/FORD
14      MILLER      13   7      /SMITH/ALLEN/CLARK/SCOTT/TURNER/ADAMS/FORD/MILLER 

请帮我参考check

【问题讨论】:

    标签: sql oracle11g hierarchy


    【解决方案1】:

    我使用了与您类似的查询,并将结果分组以只为每个 i_id 选择具有最大级别的一行。

    查询

    select *
    from (
        select
            i_id, name, mgr_id, max(plevel) - 1 "level",
            max(path) keep (dense_rank last order by plevel) path
    from (
            select i_id, name, mgr_id, level plevel, SYS_CONNECT_BY_PATH(name, '/') path
            from emp
            connect by prior i_id = mgr_id
        )
    group by i_id, name, mgr_id
    )
    order by "level", i_id
    

    Results

    | I_ID |   NAME | MGR_ID | LEVEL |PATH                                              |
    |------|--------|--------|-------|--------------------------------------------------|
    |    1 |  SMITH |      0 |     0 |/SMITH                                            |
    |    2 |  ALLEN |      1 |     1 |/SMITH/ALLEN                                      |
    |    3 |   WARD |      1 |     1 |/SMITH/WARD                                       |
    |    5 | MARTIN |      1 |     1 |/SMITH/MARTIN                                     |
    |    4 |  JONES |      2 |     2 |/SMITH/ALLEN/JONES                                |
    |    6 |  BLAKE |      3 |     2 |/SMITH/WARD/BLAKE                                 |
    |    7 |  CLARK |      2 |     2 |/SMITH/ALLEN/CLARK                                |
    |    8 |  SCOTT |      7 |     3 |/SMITH/ALLEN/CLARK/SCOTT                          |
    |    9 |   KING |      7 |     3 |/SMITH/ALLEN/CLARK/KING                           |
    |   10 | TURNER |      8 |     4 |/SMITH/ALLEN/CLARK/SCOTT/TURNER                   |
    |   12 |  JAMES |      8 |     4 |/SMITH/ALLEN/CLARK/SCOTT/JAMES                    |
    |   11 |  ADAMS |     10 |     5 |/SMITH/ALLEN/CLARK/SCOTT/TURNER/ADAMS             |
    |   13 |   FORD |     11 |     6 |/SMITH/ALLEN/CLARK/SCOTT/TURNER/ADAMS/FORD        |
    |   14 | MILLER |     13 |     7 |/SMITH/ALLEN/CLARK/SCOTT/TURNER/ADAMS/FORD/MILLER |
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 2011-11-30
      相关资源
      最近更新 更多