zoukankan      html  css  js  c++  java
  • Oracle 自连接深度查询

    通常当一个表涉及到自连接的时候,我们在查询时,都会采用 join 自身,用不同的别名。

    如下:

    SELECT TC.AGENCYNAME, ' REPORT FOR ', TP.AGENCYNAME
      FROM T_AGENCY TP
     INNER JOIN T_AGENCY TC
        ON TP.AGENCYID = TC.PARENTID
     WHERE TP.AGENCYID = 2;

    结果如下:

    从结果可以看出,这样的查询只能得到一层关系的数据,那么如果想要得到更多层级的结果呢?

    显然这样的方式,已经不能满足我们的需求了。

    那么 我们再看下 Oracle 的层次查询:

    SELECT AGENCYNAME, ' REPORT FOR ', PRIOR AGENCYNAME
    FROM T_AGENCY
    START WITH AGENCYID = 2 ---规定遍历从属关系树的起点
    CONNECT BY PRIOR AGENCYID = PARENTID;

    采用的是 CONNECT BY PRIOR , PRIOR 代表的是上一级的表。

    CONNECT BY PRIOR AGENCYID = PARENTID;

    就如同上述 inner join 方式 中的 

     TP.AGENCYID = TC.PARENTID

    看结果:

    从结果看,这里包含了所有字节点的内容。

    看下条理比较顺的查询结果,

    SELECT LPAD(' ', 2 * LEVEL - 1) || SYS_CONNECT_BY_PATH(AGENCYNAME, '/') "PATH"
    FROM T_AGENCY
    START WITH AGENCYID = 2 ---规定遍历从属关系树的起点
    CONNECT BY PRIOR AGENCYID = PARENTID;

    直接看结果:

    这样层次结构就更清楚了。

    参考自:

    oracle 的自连接(self join)操作

  • 相关阅读:
    python bif 如何自学
    python萌新应知应会
    Animation
    响应式布局
    浏览器兼容
    HTML基础
    SublimeText 3 Emmet Hot Keys
    Web大前端环境搭建
    Sublime Text 运行js
    bash脚本编程基础
  • 原文地址:https://www.cnblogs.com/lanfengniao/p/3111979.html
Copyright © 2011-2022 走看看