CONNECT BY - how to get leaves only
Date: 16 Dec 1994 02:04:42 GMT
Message-ID: <3cqsjq$8jd_at_fred.uswnvg.com>
Hi everyone,
I hope somebody out there can help me with the following problem.
(I am using SQLFORMS30 on ORACLE version 7.0.)
Basically, I need to get the "leaves" of a tree in a "connect by"
statement (ie the last node) in default list of values. I do not want
any intermediate nodes to come up. Also, since the "select" will be
used in a default "list of values" box, it will have to be a single
"select" statement. No PL/SQL statement can be used. Just plain basic
"select". Also, I do not know how deep the levels can be and the branches
can have different levels.
The table and the content looks like this :
A B
---------- ----------
NULL 1 1 2 2 3 3 4 NULL 11 11 12 NULL 21 NULL 31
The tree structure looks like this:
NULL | ------------------------ | | | | 1 11 21 31 | | 2 12 | 3 | 4 The desired answer will be (in the list of values box): 4 12 21 31
I have come up with a "select" statement. However, it doesn't work! For some reason, the sub-query causes the "select" to return only the branch with only 1 node (ie: 21 and 31). Here's the query:
select t1.a, t1.b, level
from x t1
where level =
(select max (level) from x t2 where t2.b is not null connect by prior t2.b = t2.a start with t2.b = t1.b)
connect by prior t1.b = t1.a
start with t1.a is null
I wonder what's wrong with the query and how it should be. It works fine if I hardcoded the level but, as I mentioned earlier, I can't do that in the actual code.
Any suggestion, help or hint will be greatly appreciated.
(Whatever I say and own are mine, mine and only mine! So, don't you dare claim they are yours!)
Kim Ng
Paradigm Computer Consulting, Inc.
20611 E Bothell-Everett Hwy SE, Suite 280 Bothell, WA 98012
U.S.A. Received on Fri Dec 16 1994 - 03:04:42 CET