zoukankan      html  css  js  c++  java
  • ORACLE遞歸查詢

    ORACLE支持常規的用CTE遞歸的方式實現遞歸查詢,也有自己特有的查詢方式,ORACLE文檔中叫層次數據查詢。

    這裏通過一個簡單的样例來介紹這兩種查詢方式。

    數據準備:

    CREATE TABLE TBL_TEST( ID NUMBER,  NAME VARCHAR2(100),  PID NUMBER); 
    /
    
    BEGIN
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');
    END;	
     /


    需求:ID = 1結點下全部的子結點(從表中數據能够看出是1、2、4、5)


    ORACLE特有的遞歸查詢方式:

    SELECT * FROM TBL_Test
    START WITH ID = 1           -- 开始行(start row)
    CONNECT BY PRIOR ID = pid;  -- prior代表上一行(parent row)
    CTE方式:

    WITH cte(ID,NAME,PID) AS
    (
        SELECT ID,NAME,PID
        FROM TBL_TEST
        WHERE ID = 1
    UNION ALL
        SELECT b.ID,b.NAME,b.PID
        FROM cte a
        INNER JOIN TBL_TEST b ON a.id = b.PID
    )
    SELECT * FROM cte;
    以上兩種方法均查出了正確的結果。


    上面第一種方法的Start With 相當於第二種方法的UNION ALL上面的部分,CONNECT BY 則相當於UNION ALL以下的部分。

    CTE方法具有可移植性,SQL SERVER和DB2也支持。


    關於CTE方法實現遞歸的很多其它實例。還能够看以下兩遍文章:

    SQL遞歸查詢實戰

    遞歸查詢初體驗


  • 相关阅读:
    OC面向对象—继承
    OC面向对象—封装
    OC内存管理
    OC方法和文件编译
    OC语言基础知识
    节点操作-2
    留言 节点操作案例
    js 下拉菜单案例
    节点操作
    tab栏切换效果
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6944349.html
Copyright © 2011-2022 走看看