我有如下的树状数据:
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后,发现层次结构发生了变化,所以是不能加的。请问各位有什么解决办法吗?
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后,发现层次结构发生了变化,所以是不能加的。请问各位有什么解决办法吗?
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');
...
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');
...
001,001|001,002,002|001,002|001|001 这样更好