Oracle层次查询start with connect by
博客参考:https://www.cnblogs.com/jerryxing/articles/2339352.html start with connect by 层次查询(Hierarchical Queries) 语法: SELECT???? * start with: 表示根记录的条件 不过,connect by 不能包含子查询。 ? Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。可以通过一个简单的例子来理解其使用的概念和方法。 创建表示例: CREATE TABLE tbl_test ( ID NUMBER,NAME VARCHAR2(10),pid NUMBER DEFAULT 0 ); INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(‘1‘,‘111‘,‘0‘); INSERT INTO TBL_TEST(ID,PID) VALUES(‘2‘,‘222‘,‘1‘); INSERT INTO TBL_TEST(ID,PID) VALUES(‘3‘,‘333‘,PID) VALUES(‘4‘,‘444‘,PID) VALUES(‘5‘,‘555‘,‘2‘); INSERT INTO TBL_TEST(ID,PID) VALUES(‘6‘,‘666‘,PID) VALUES(‘9‘,‘999‘,‘2‘); ?查询表数据: ? 从父记录行向子记录行递归 select * from TBL_TEST start with id=1 connect by prior id=pid ?根节点为id=1 connect by prior id=pid 由id和pid建立父子关系,id=1开始,在pid寻找等于1的值,可以找到2和4,在pid=2,4 中找,找到id有5和9俩个。 ? 从子记录向父记录递归 select * from TBL_TEST start with id=5 connect by prior pid=id 根节点为id=5 connect by prior pid=id?? id=5时,找pid为2,在找id=2的行,找到pid=1,再找id=1的行 ? LEVEL,ROW_NUMBER,OVER的应用 SELECT LEVEL,pid,ROW_NUMBER () OVER (PARTITION BY pid ORDER BY pid) by_pid,ROW_NUMBER () OVER (ORDER BY pid) AS rn,NAME FROM tbl_test START WITH pid = 0 CONNECT BY PRIOR ID = pid ORDER BY 1 记录如下: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |