求一条查询层次结构的ORCAL 查询语句~~~~~~测试表创建语句:CREATE TABLE TEST_QUERY(ID VARCHAR2(10),--ID
求一条查询层次结构的ORCAL 查询语句~~~~~~ 测试表创建语句: CREATE TABLE TEST_QUERY ( ID VARCHAR2(10),--ID PID VARCHAR2(10),----父文件夹ID NAME VARCHAR2(100),----文件夹名称 IS_FOLDER NUMBER(1)-- 1:文件夹,0:文件 ) INSERT INTO TEST_QUERY VALUES('0000','0','A',1); INSERT INTO TEST_QUERY VALUES('0001','0000','A01',1); INSERT INTO TEST_QUERY VALUES('0002','0000','A02',1); INSERT INTO TEST_QUERY VALUES('0003','0000','A03',1); INSERT INTO TEST_QUERY VALUES('0007','0003','A03-01',0); INSERT INTO TEST_QUERY VALUES('0008','0003','A03-02',0); INSERT INTO TEST_QUERY VALUES('0009','0003','A03-03',0); INSERT INTO TEST_QUERY VALUES('0004','0000','A04',0); INSERT INTO TEST_QUERY VALUES('0005','0000','A05',0); INSERT INTO TEST_QUERY VALUES('0006','0000','A06',0); INSERT INTO TEST_QUERY VALUES('0010','0006','A06-01',0); INSERT INTO TEST_QUERY VALUES('0011','0006','A06-02',0); INSERT INTO TEST_QUERY VALUES('0012','0006','A06-03',1); INSERT INTO TEST_QUERY VALUES('0013','0012','A06-03-01',0); INSERT INTO TEST_QUERY VALUES('0014','0012','A06-03-02',0); INSERT INTO TEST_QUERY VALUES('0015','0012','A06-03-03',0); 情景:不知道一个文件夹里面有多少个文件 和多少个文件夹 求查询的语句实现如下功能: 输入一个父ID,然后就把他下面的所有文件和文件夹的层次关系全部查询出来,得到类似于下面的结果 ID, PID NAME IS_FOLDER LEVEL 0000 0 A 1 1 0001 0000 A01 1 2 0002 0000 A02 1 2 0003 0000 A03 1 2 0007 0003 A03-01 0 3 ……………… 这个用下面的语句实现出来了: SELECT TEST_QUERY.*,LEVEL FROM TEST_QUERY where 1=1 START WITH TEST_QUERY.PID = '0' CONNECT BY PRIOR TEST_QUERY.ID = TEST_QUERY.PID 但是如果我想要0003下面的文件夹和文件信息,就查不出来了 在where后面加PID条件 或者 START WITH 后面的PID改成0003都不行 请高手帮帮忙,有其他的办法吗 比如给的条件PID是0006,那么想要的结果就是 ID, PID NAME IS_FOLDER LEVEL 0006 0000 A06 1 1 0010 0006 A06-01 0 2 0011 0006 A06-02 0 2 0012 0006 A06-03 1 2 0013 0012 A03-03-01 0 3 0014 0012 A03-03-02 0 3 0015 0012 A03-03-03 0 3 [解决办法]
引用: 测试表创建语句: CREATE TABLE TEST_QUERY ( ID VARCHAR2(10),--ID PID VARCHAR2(10),----父文件夹ID NAME VARCHAR2(100),----文件夹名称 IS_FOLDER NUMBER(1)-- 1:文件夹,0:文件 ) INSERT INTO TEST_QUERY VALUES('0000','0','A',1); INSERT INTO TEST_QUERY VALUES('0001','0000','A01',1); INSERT INTO TEST_QUERY VALUES('0002','0000','A02',1); INSERT INTO TEST_QUERY VALUES('0003','0000','A03',1); INSERT INTO TEST_QUERY VALUES('0007','0003','A03-01',0); INSERT INTO TEST_QUERY VALUES('0008','0003','A03-02',0); INSERT INTO TEST_QUERY VALUES('0009','0003','A03-03',0); INSERT INTO TEST_QUERY VALUES('0004','0000','A04',0); INSERT INTO TEST_QUERY VALUES('0005','0000','A05',0); INSERT INTO TEST_QUERY VALUES('0006','0000','A06',0); INSERT INTO TEST_QUERY VALUES('0010','0006','A06-01',0); INSERT INTO TEST_QUERY VALUES('0011','0006','A06-02',0); INSERT INTO TEST_QUERY VALUES('0012','0006','A06-03',1); INSERT INTO TEST_QUERY VALUES('0013','0012','A06-03-01',0); INSERT INTO TEST_QUERY VALUES('0014','0012','A06-03-02',0); INSERT INTO TEST_QUERY VALUES('0015','0012','A06-03-03',0); 情景:不知道一个文件夹里面有多少个文件 和多少个文件夹 求查询的语句实现如下功能: 输入一个父ID,然后就把他下面的所有文件和文件夹的层次关系全部查询出来,得到类似于下面的结果 ID, PID NAME IS_FOLDER LEVEL 0000 0 A 1 1 0001 0000 A01 1 2 0002 0000 A02 1 2 0003 0000 A03 1 2 0007 0003 A03-01 0 3 ……………… 这个用下面的语句实现出来了: SELECT TEST_QUERY.*,LEVEL FROM TEST_QUERY where 1=1 START WITH TEST_QUERY.PID = '0' CONNECT BY PRIOR TEST_QUERY.ID = TEST_QUERY.PID 但是如果我想要0003下面的文件夹和文件信息,就查不出来了 在where后面加PID条件 或者 START WITH 后面的PID改成0003都不行 请高手帮帮忙,有其他的办法吗 比如给的条件PID是0006,那么想要的结果就是 ID, PID NAME IS_FOLDER LEVEL 0006 0000 A06 1 1 0010 0006 A06-01 0 2 0011 0006 A06-02 0 2 0012 0006 A06-03 1 2 0013 0012 A03-03-01 0 3 0014 0012 A03-03-02 0 3 0015 0012 A03-03-03 0 3
SELECT TEST_QUERY.*, LEVEL FROM TEST_QUERY START WITH TEST_QUERY.ID = '0006' CONNECT BY PRIOR TEST_QUERY.ID = TEST_QUERY.PID [解决办法] 引用: Quote: 引用: 测试表创建语句: CREATE TABLE TEST_QUERY ( ID VARCHAR2(10),--ID PID VARCHAR2(10),----父文件夹ID NAME VARCHAR2(100),----文件夹名称 IS_FOLDER NUMBER(1)-- 1:文件夹,0:文件 ) INSERT INTO TEST_QUERY VALUES('0000','0','A',1); INSERT INTO TEST_QUERY VALUES('0001','0000','A01',1); INSERT INTO TEST_QUERY VALUES('0002','0000','A02',1); INSERT INTO TEST_QUERY VALUES('0003','0000','A03',1); INSERT INTO TEST_QUERY VALUES('0007','0003','A03-01',0); INSERT INTO TEST_QUERY VALUES('0008','0003','A03-02',0); INSERT INTO TEST_QUERY VALUES('0009','0003','A03-03',0); INSERT INTO TEST_QUERY VALUES('0004','0000','A04',0); INSERT INTO TEST_QUERY VALUES('0005','0000','A05',0); INSERT INTO TEST_QUERY VALUES('0006','0000','A06',0); INSERT INTO TEST_QUERY VALUES('0010','0006','A06-01',0); INSERT INTO TEST_QUERY VALUES('0011','0006','A06-02',0); INSERT INTO TEST_QUERY VALUES('0012','0006','A06-03',1); INSERT INTO TEST_QUERY VALUES('0013','0012','A06-03-01',0); INSERT INTO TEST_QUERY VALUES('0014','0012','A06-03-02',0); INSERT INTO TEST_QUERY VALUES('0015','0012','A06-03-03',0); 情景:不知道一个文件夹里面有多少个文件 和多少个文件夹 求查询的语句实现如下功能: 输入一个父ID,然后就把他下面的所有文件和文件夹的层次关系全部查询出来,得到类似于下面的结果 ID, PID NAME IS_FOLDER LEVEL 0000 0 A 1 1 0001 0000 A01 1 2 0002 0000 A02 1 2 0003 0000 A03 1 2 0007 0003 A03-01 0 3 ……………… 这个用下面的语句实现出来了: SELECT TEST_QUERY.*,LEVEL FROM TEST_QUERY where 1=1 START WITH TEST_QUERY.PID = '0' CONNECT BY PRIOR TEST_QUERY.ID = TEST_QUERY.PID 但是如果我想要0003下面的文件夹和文件信息,就查不出来了 在where后面加PID条件 或者 START WITH 后面的PID改成0003都不行 请高手帮帮忙,有其他的办法吗 比如给的条件PID是0006,那么想要的结果就是 ID, PID NAME IS_FOLDER LEVEL 0006 0000 A06 1 1 0010 0006 A06-01 0 2 0011 0006 A06-02 0 2 0012 0006 A06-03 1 2 0013 0012 A03-03-01 0 3 0014 0012 A03-03-02 0 3 0015 0012 A03-03-03 0 3
SELECT TEST_QUERY.*, LEVEL FROM TEST_QUERY START WITH TEST_QUERY.ID = '0006' CONNECT BY PRIOR TEST_QUERY.ID = TEST_QUERY.PID 正确答案了啦,可以结帖了