dbTalk Databases Forums  

SQL challenge to any gurus out there

comp.databases.oracle.misc comp.databases.oracle.misc


Discuss SQL challenge to any gurus out there in the comp.databases.oracle.misc forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
GlenT
 
Posts: n/a

Default SQL challenge to any gurus out there - 07-18-2003 , 03:49 AM






Hi,
I am trying to create a view which shows inheritence but cannot get this
right. I have provided the table and data to assist anyone kind enough to
help us plus details of what we are trying to achieve.
CREATE TABLE GLEN_TEST (
TYPE VARCHAR2 (10),
PARENT VARCHAR2 (10),
PROPERTY NUMBER);

INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'A', NULL, 1);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'A', NULL, 2);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'B', 'A', 3);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'B', 'A', 4);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'C', 'B', 5);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'D', 'B', 6);
COMMIT;

We can see that this is a simple child-parent relationship.

If we do a select * we would get the following result:
TYPE PARENT PROPERTY
------- ------ ----------
A null 1
A null 2
B A 3
B A 4
C B 5
D B 6

What we are trying to achieve would look like this:
TYPE PARENT PROPERTY
------ ------ ----------
A null 1
A null 2
B A 1
B A 2
B null 3
B null 4
C A 1
C A 2
C B 3
C B 4
C null 5
D A 1
D A 2
D B 3
D B 4
D null 6

What we are trying to achieve is for every type to show all it's inheritance
i.e. type B inherits from type A because A is it's parent so the properties
for type B are 3 and 4 plus the properties for type A which are 1 and 2.
Type C would have it's own properties (5) plus those from type B (3,4) which
is it's parent plus those of type A (1,2) which is B's parent.

I have tried using the connect by prior but with no success as the
inheritence could be n layers deep. If anyone out there likes a challenge
and can help - we would be extremely grateful.
Regards
Glen




Reply With Quote
  #2  
Old   
Alan
 
Posts: n/a

Default Re: SQL challenge to any gurus out there - 07-18-2003 , 01:20 PM






Search Google for "adjacency list model celko"


"GlenT" <glen.turner (AT) bt (DOT) com> wrote

Quote:
Hi,
I am trying to create a view which shows inheritence but cannot get this
right. I have provided the table and data to assist anyone kind enough to
help us plus details of what we are trying to achieve.
CREATE TABLE GLEN_TEST (
TYPE VARCHAR2 (10),
PARENT VARCHAR2 (10),
PROPERTY NUMBER);

INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'A', NULL, 1);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'A', NULL, 2);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'B', 'A', 3);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'B', 'A', 4);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'C', 'B', 5);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'D', 'B', 6);
COMMIT;

We can see that this is a simple child-parent relationship.

If we do a select * we would get the following result:
TYPE PARENT PROPERTY
------- ------ ----------
A null 1
A null 2
B A 3
B A 4
C B 5
D B 6

What we are trying to achieve would look like this:
TYPE PARENT PROPERTY
------ ------ ----------
A null 1
A null 2
B A 1
B A 2
B null 3
B null 4
C A 1
C A 2
C B 3
C B 4
C null 5
D A 1
D A 2
D B 3
D B 4
D null 6

What we are trying to achieve is for every type to show all it's
inheritance
i.e. type B inherits from type A because A is it's parent so the
properties
for type B are 3 and 4 plus the properties for type A which are 1 and 2.
Type C would have it's own properties (5) plus those from type B (3,4)
which
is it's parent plus those of type A (1,2) which is B's parent.

I have tried using the connect by prior but with no success as the
inheritence could be n layers deep. If anyone out there likes a challenge
and can help - we would be extremely grateful.
Regards
Glen






Reply With Quote
  #3  
Old   
Laly
 
Posts: n/a

Default Re: SQL challenge to any gurus out there - 07-19-2003 , 01:49 PM



Hi

I got the query for getting the inheritance of one element :

if you want to get it for D :

select
'D', parent.parent, glen_test.property
from
(
select distinct parent
from glen_test
where parent is not null
start with type='D'
connect by prior parent=type
) parent,
glen_test
where
parent.parent = glen_test.type
union
select
type, null, property
from
glen_test
where
type = 'D'

But I cannot get a query that will bring all the inheritance for all the
elements.

HTH,

Laly.





"GlenT" <glen.turner (AT) bt (DOT) com> a écrit dans le message de news:
bf8cpn$5sh$1 (AT) pheidippides (DOT) axion.bt.co.uk...

Quote:
Hi,
I am trying to create a view which shows inheritence but cannot get this
right. I have provided the table and data to assist anyone kind enough to
help us plus details of what we are trying to achieve.
CREATE TABLE GLEN_TEST (
TYPE VARCHAR2 (10),
PARENT VARCHAR2 (10),
PROPERTY NUMBER);

INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'A', NULL, 1);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'A', NULL, 2);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'B', 'A', 3);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'B', 'A', 4);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'C', 'B', 5);
INSERT INTO GLEN_TEST ( TYPE, PARENT, PROPERTY ) VALUES ( 'D', 'B', 6);
COMMIT;

We can see that this is a simple child-parent relationship.

If we do a select * we would get the following result:
TYPE PARENT PROPERTY
------- ------ ----------
A null 1
A null 2
B A 3
B A 4
C B 5
D B 6

What we are trying to achieve would look like this:
TYPE PARENT PROPERTY
------ ------ ----------
A null 1
A null 2
B A 1
B A 2
B null 3
B null 4
C A 1
C A 2
C B 3
C B 4
C null 5
D A 1
D A 2
D B 3
D B 4
D null 6

What we are trying to achieve is for every type to show all it's
inheritance
i.e. type B inherits from type A because A is it's parent so the
properties
for type B are 3 and 4 plus the properties for type A which are 1 and 2.
Type C would have it's own properties (5) plus those from type B (3,4)
which
is it's parent plus those of type A (1,2) which is B's parent.

I have tried using the connect by prior but with no success as the
inheritence could be n layers deep. If anyone out there likes a challenge
and can help - we would be extremely grateful.
Regards
Glen






Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.