Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.misc -> Re: start with parent but don't include parent in results

Re: start with parent but don't include parent in results

From: grasp06110 <grasp06110_at_yahoo.com>
Date: Wed, 06 Jun 2007 17:21:23 -0700
Message-ID: <1181175683.316954.33790@g4g2000hsf.googlegroups.com>


On Jun 6, 12:21 am, "Michel Cadot" <micadot{at}altern{dot}org> wrote:

> "grasp06110" <grasp06..._at_yahoo.com> a écrit dans le message de news: 1181079752.933617.84..._at_g4g2000hsf.googlegroups.com...

> | Hi Everybody,
> |
> | Trying to get all of the child records for a node in a tree without
> | getting a record for the parent record and can't seem to do it
> | properly.
> |
> | This is similar to the posting at the url below but the parallel to
> | the solution posted there doesn't seem to work here.
> |
> |http://groups.google.com/group/comp.databases.oracle.misc/browse_thre...
> |
> | Any help would be greatly appreciated.
> |
> | Thanks,
> | John
> |
> | Details below:
> |
> | /* Currently working with Oracle 9i */
> |
> | create table tree (
> | parent varchar2(10),
> | child varchar2(10),
> | constraint tree_pk primary key(child),
> | constraint tree_child_fk foreign key(parent) references tree(child)
> | );
> |
> | insert into tree values (null, 'ROOT');
> | insert into tree values ('ROOT', 'NODE1');
> | insert into tree values ('ROOT', 'NODE2');
> | insert into tree values ('ROOT', 'NODE3');
> |
> | select
> | *
> | from
> | tree
> | start with
> | child = 'ROOT'
> | connect by
> | parent = prior child
> |
> | /* gives all records */
> | select
> | *
> | from
> | tree
> | start with
> | child = 'ROOT'
> | connect by
> | parent = prior child
> | and child != 'ROOT'
> |
> | /* gives no records */
> | select
> | *
> | from
> | tree
> | start with
> | child = 'ROOT'
> | and child != 'ROOT'
> | connect by
> | parent = prior child
> |
> | /*
> | * desired results but ugly,
> | * especially if I need to combine
> | * this type of query with other queries
> | */
> |
> | select * from (
> | select
> | *
> | from
> | tree
> | start with
> | child = 'ROOT'
> | connect by
> | parent = prior child
> | )
> | where child != 'ROOT'
> |
>
> 3 ways:
>
> SQL> select
>   2    *
>   3  from
>   4    tree
>   5  where child != 'ROOT'
>   6  start with
>   7    child = 'ROOT'
>   8  connect by
>   9    parent = prior child
>  10  /
> PARENT     CHILD
> ---------- ----------
> ROOT       NODE1
> ROOT       NODE2
> ROOT       NODE3
>
> 3 rows selected.
>
> SQL> select
>   2    *
>   3  from
>   4    tree
>   5  where level != 1
>   6  start with
>   7    child = 'ROOT'
>   8  connect by
>   9    parent = prior child
>  10  /
> PARENT     CHILD
> ---------- ----------
> ROOT       NODE1
> ROOT       NODE2
> ROOT       NODE3
>
> 3 rows selected.
>
> SQL> select
>   2    *
>   3  from
>   4    tree
>   5  where child != 'ROOT'
>   6  start with
>   7    parent = 'ROOT'
>   8  connect by
>   9    parent = prior child
>  10  /
> PARENT     CHILD
> ---------- ----------
> ROOT       NODE1
> ROOT       NODE2
> ROOT       NODE3
>
> 3 rows selected.
>
> Regards
> Michel Cadot

Got It. Thanks for the help! Received on Wed Jun 06 2007 - 19:21:23 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US