我有如下的树状数据:
001
|
|------002
|        |
|        |----003
|        |
|        |----004
|
|
|------005
         |
         |----002
         |     |
         |     |-----003
         |     |
         |     |-----004
         |
         |
         |----006
         |     |
         |     |
         |     |-----002
         |            |
         |            |----003
         |            |
         |            |----004
         |
         |
         |----007
对应db中的数据如下:
INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
VALUES('tet','001');
INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
VALUES('001','002');
INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
VALUES('002','003');
INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
VALUES('002','004');
INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
VALUES('001','005');
INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
VALUES('005','002');
INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
VALUES('005','006');
INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
VALUES('005','007');
INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
VALUES('002','003');
INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
VALUES('002','004');
INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
VALUES('006','002');
INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
VALUES('002','003');
INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
VALUES('002','004');
执行的sql如下:
select level , PARENT , CHILD
from TESTTABLE 
start with PARENT = '001'
connect by prior CHILD = PARENT
order siblings by CHILD
执行的结果如下:
1 001 002
2 002 003
2 002 003
2 002 003
2 002 004
2 002 004
2 002 004
1 001 005
2 005 002
3 002 003
3 002 003
3 002 003
3 002 004
3 002 004
3 002 004
2 005 006
3 006 002
4 002 003
4 002 003
4 002 003
4 002 004
4 002 004
4 002 004
2 005 007
执行后发现同一层上有相同的数据,但是实际的结构中,同一层是没有相同数据的,我加上distinct后,发现层次结构发生了变化,所以是不能加的。请问各位有什么解决办法吗?

解决方案 »

  1.   

    自己看看数据是什么原因吧:...
    INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
    VALUES('001','002');
    INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
    VALUES('002','003');
    INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
    VALUES('002','004');
    ...
    INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
    VALUES('002','003');
    INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
    VALUES('002','004');
    ...
    INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
    VALUES('002','003');
    INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
    VALUES('002','004');
    ...
      

  2.   

    自己看看数据是什么原因吧:...
    INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
    VALUES('001','002');
    INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
    VALUES('002','003');
    INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
    VALUES('002','004');
    ...
    INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
    VALUES('002','003');
    INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
    VALUES('002','004');
    ...
    INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
    VALUES('002','003');
    INSERT INTO SCHAGU.TESTTABLE (PARENT, CHILD) 
    VALUES('002','004');
    ...
      

  3.   

    在数据库设计上,完全可以加上一列,描述你的全路径,如:加full_no_id
    001,001|001,002,002|001,002|001|001 这样更好