CONNECT BY查询中有一个伪列叫LEVEL,表示一行纪录在树型结构中的层次,请看下例: SQL> select * from t_tree 2 start with id='A' 3 connect by id= prior p_id; ID P_ID ---------- ---------- A B B S S W B DSQL> select x.*, level from t_tree x 2 start with id='A' 3 connect by id=prior p_id; ID P_ID LEVEL ---------- ---------- ---------- A B 1 B S 2 S W 3 B D 2SQL> select x.*, level from t_tree x 2 where level < 3 3 start with id='A' 4 connect by id= prior p_id; ID P_ID LEVEL ---------- ---------- ---------- A B 1 B S 2 B D 2如果你看明白了,那问题应该就解决了.TO chooser: 我在ORACLE版差不多一年了,可能比较多人知道我的名字. 其实我并不喜欢指名道姓地问问题, 而且也提出过多次不要这样做. 但是有些兄弟可能比较急,我也没有什么好办法... 另外,我的名字是弱水,不是溺水
A B
B S
B D
S W
你到底什么意思?
说的话甚是有理。
keeper你的过滤原则是不是:
去掉树状结构中,不到3层的分支。
或者说是想得到,末梢节点层次为3的所有分支。
这个情况是我们的QA在做黑盒测试的某种临界情况下出现的,原来coding的时候没有考虑到数据库里会出现这样的数据,但是实际情况下出现了,而且也是不可能删除掉的。另外,我是理解connect by的操作原理的。
如果没有规律,数据量又大,至少需要提供我一个过滤规则,我才能看看还有没有戏。
SQL> select * from t_tree
2 start with id='A'
3 connect by id= prior p_id;
ID P_ID
---------- ----------
A B
B S
S W
B DSQL> select x.*, level from t_tree x
2 start with id='A'
3 connect by id=prior p_id;
ID P_ID LEVEL
---------- ---------- ----------
A B 1
B S 2
S W 3
B D 2SQL> select x.*, level from t_tree x
2 where level < 3
3 start with id='A'
4 connect by id= prior p_id;
ID P_ID LEVEL
---------- ---------- ----------
A B 1
B S 2
B D 2如果你看明白了,那问题应该就解决了.TO chooser: 我在ORACLE版差不多一年了,可能比较多人知道我的名字. 其实我并不喜欢指名道姓地问问题, 而且也提出过多次不要这样做. 但是有些兄弟可能比较急,我也没有什么好办法... 另外,我的名字是弱水,不是溺水