powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Hierarchie w SQL
17 сообщений из 17, страница 1 из 1
Hierarchie w SQL
    #32050504
kätzchen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ljudi, pomogite!
Kto-nibud' znaet, kak soedinit' dwe ierarchicheski organisowannie tablizi?
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050507
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажи структуру таблиц и объясни, что примерно охота получить- как организовывается иерархия.
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050509
kätzchen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ierarchija perwoj tablizi:
Sowet direktorow
otdel1
podotdel
otdel2 i t.d.
W kagdom otdele est' swoi projekti.
Wtoraja tabliza:
glawnij projekt
podprojekt.

W itoge mne nado poluchit' takoe:
sowet direktorow
otdel1 projekt1
podprojekt1
podotdel
projekt2
projekt3
otdel2
i .t.d.
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050512
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В одном отделе только один подотдел, или сколь угодно глубокая иерархия?
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050513
kätzchen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Skol'ko ugodno glubokaja ierarchija, no projekt imeet wsego odin podurowen'.
Zapros, kotorij wiwodit mne wse otdeli (ierarchicheski organizowanno) wmeste s glawnimi projektami, ja napisala.
Zapros, kotorij wiwodit projekti s podprojektami toge est', a wot kak ix soedinit' ja ne znaju. Ja, woobsche, segodnja, perwij raz uznala, chto mogno takie ierarchie delat'.
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050518
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри, такая структура, или нет, поправь если что:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create table project (
    project_id integer
  , constraint pk_project primary key (project_id)
)
/
create table subproject (
    subproject_id integer
  , project_id integer
  , constraint pk_subproject primary key (subproject_id)
  , constraint fk_subproject_project foreign key (project_id) references project(project_id) on delete cascade
)
/
create table otdel (
    otdel_id integer
  , parent_id integer
  , project_id integer
  , constraint pk_otdel primary key (otdel_id)
  , constraint fk_otdel_self foreign key (parent_id) references otdel(otdel_id) on delete cascade
  , constraint fk_otdel_project foreign key (project_id) references project(project_id)
)
/


По идее, проектов может
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050519
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И какой оракл, версия?
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050520
kätzchen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ne sowsem tak. Ti s Oracle Application rabotal. C temami patrm, hrtrm?
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050521
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, не работал.

А в теории иерархия из объединения делается через подзапрос, наподобе:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select * from (
  select * 
  from table1 t1
       , table2 t2
  where t1.id = t2.id 
)  t
connect by prior t.id = t.parent_id
start with t.parent_id is null


Чтобы точнее написать, надо точную структуру таблиц видеть, а догадываться- дело неблагодарное:)
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050523
kätzchen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ja ochen' nadejus', chto ti sejchas ne ispugaesch'sja, uwidew 'tochnuju strukturu' ;-)
Tablizi sodergat i drugie kolonki, no oni mne w dannij moment ne nugni.
Perwaja tabliza, eto projekti.
Projekt_id - eto osnownoj projekt,
a attribute1 - eto id podprojekta. (moget imet' znachenie NULL, esli net podprojekta.)
Carrying_out_organization_id eto otdel, k kotoromu prinadlegit projekt.

Wtoraja tabliza:
eto ierarchija otgelow:
naprimer:
org_id_child org_id parent
22 30
22 podotdel 30-ki i naoborot - 30 glawnij otdel nad 22m.



DROP TABLE PA_PROJECTS_ALL CASCADE CONSTRAINTS ;

CREATE TABLE PA_PROJECTS_ALL (
PROJECT_ID NUMBER (15) NOT NULL,
CARRYING_OUT_ORGANIZATION_ID NUMBER (15) NOT NULL,
ATTRIBUTE1 VARCHAR2 (150),
TABLESPACE PAD NOLOGGING
PCTFREE 10
PCTUSED 80
INITRANS 10
MAXTRANS 255
STORAGE (
INITIAL 16384


NEXT 2129920
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 4 FREELIST GROUPS 1 )
NOCACHE;


CREATE INDEX PA_PROJECTS_N2 ON
PA_PROJECTS_ALL(CARRYING_OUT_ORGANIZATION_ID, PROJECT_STATUS_CODE, COMPLETION_DATE, START_DATE)
TABLESPACE PAX PCTFREE 5 STORAGE(INITIAL 16384 NEXT 131072 PCTINCREASE 0 )
;

CREATE UNIQUE INDEX PA_PROJECTS_U2 ON
PA_PROJECTS_ALL(SEGMENT1)
TABLESPACE PAX PCTFREE 5 STORAGE(INITIAL 16384 NEXT 163840 PCTINCREASE 0 )
;

CREATE UNIQUE INDEX PA_PROJECTS_U3 ON
PA_PROJECTS_ALL(NAME)
TABLESPACE PAX PCTFREE 5 STORAGE(INITIAL 16384 NEXT 163840 PCTINCREASE 0 )
;

CREATE UNIQUE INDEX PA_PROJECTS_U4 ON
PA_PROJECTS_ALL(PM_PROJECT_REFERENCE, PM_PRODUCT_CODE)
TABLESPACE PAX PCTFREE 10 STORAGE(INITIAL 16384 NEXT 131072 PCTINCREASE 0 )
;

CREATE INDEX PA_PROJECTS_N1 ON
PA_PROJECTS_ALL(LABOR_BILL_RATE_ORG_ID, LABOR_STD_BILL_RATE_SCHDL)
TABLESPACE PAX PCTFREE 5 STORAGE(INITIAL 16384 NEXT 163840 PCTINCREASE 0 )
;

CREATE INDEX PA_PROJECTS_N3 ON
PA_PROJECTS_ALL(NON_LABOR_BILL_RATE_ORG_ID, NON_LABOR_STD_BILL_RATE_SCHDL)
TABLESPACE PAX PCTFREE 5 STORAGE(INITIAL 16384 NEXT 163840 PCTINCREASE 0 )
;

CREATE INDEX PA_PROJECTS_N4 ON
PA_PROJECTS_ALL(PROJECT_STATUS_CODE)
TABLESPACE PAX PCTFREE 5 STORAGE(INITIAL 16384 NEXT 163840 PCTINCREASE 0 )
;

CREATE INDEX PA_PROJECTS_N5 ON
PA_PROJECTS_ALL(ADW_NOTIFY_FLAG)
TABLESPACE PAX PCTFREE 10 STORAGE(INITIAL 16384 NEXT 16384 PCTINCREASE 0 )
;

CREATE UNIQUE INDEX PA_PROJECTS_U1 ON
PA_PROJECTS_ALL(PROJECT_ID)
TABLESPACE PAX PCTFREE 5 STORAGE(INITIAL 16384 NEXT 163840 PCTINCREASE 0 )
;

CREATE INDEX PA_PROJECTS_N6 ON
PA_PROJECTS_ALL(TEMPLATE_FLAG)
TABLESPACE PAX PCTFREE 10 STORAGE(INITIAL 16384 NEXT 1048576 PCTINCREASE 0 )
;





DROP TABLE PER_ORG_STRUCTURE_ELEMENTS CASCADE CONSTRAINTS ;

CREATE TABLE PER_ORG_STRUCTURE_ELEMENTS (
ORGANIZATION_ID_PARENT NUMBER (15) NOT NULL,
ORGANIZATION_ID_CHILD NUMBER (15) NOT NULL,
CONSTRAINT PER_ORG_STRUCTURE_ELEMENTS_UK2
UNIQUE (ORG_STRUCTURE_VERSION_ID, ORGANIZATION_ID_CHILD) USING INDEX
TABLESPACE HRX PCTFREE 10
STORAGE ( INITIAL 40K NEXT 40K PCTINCREASE 0 ),
CONSTRAINT PER_ORG_STRUCTURE_ELEMENTS_PK
PRIMARY KEY ( ORG_STRUCTURE_ELEMENT_ID )
USING INDEX
TABLESPACE HRX PCTFREE 10
STORAGE ( INITIAL 40K NEXT 40K PCTINCREASE 0 ))
TABLESPACE HRD NOLOGGING
PCTFREE 10
PCTUSED 40
INITRANS 10
MAXTRANS 255
STORAGE (
INITIAL 16384
NEXT 32768
MINEXTENTS 1
MAXEXTENTS 2147483645
FREELISTS 4 FREELIST GROUPS 1 )
NOCACHE;

ALTER TABLE HR.PER_ORG_STRUCTURE_ELEMENTS ADD CONSTRAINT PER_ORG_STRUCTURE_ELEMENTS_FK4
FOREIGN KEY (ORGANIZATION_ID_CHILD)
REFERENCES HR.HR_ALL_ORGANIZATION_UNITS (ORGANIZATION_ID) ;

ALTER TABLE HR.PER_ORG_STRUCTURE_ELEMENTS ADD CONSTRAINT PER_ORG_STRUCTURE_ELEMENTS_FK3
FOREIGN KEY (ORG_STRUCTURE_VERSION_ID)
REFERENCES HR.PER_ORG_STRUCTURE_VERSIONS (ORG_STRUCTURE_VERSION_ID) ;

ALTER TABLE HR.PER_ORG_STRUCTURE_ELEMENTS ADD CONSTRAINT PER_ORG_STRUCTURE_ELEMENTS_FK2
FOREIGN KEY (ORGANIZATION_ID_PARENT)
REFERENCES HR.HR_ALL_ORGANIZATION_UNITS (ORGANIZATION_ID) ;

ALTER TABLE HR.PER_ORG_STRUCTURE_ELEMENTS ADD CONSTRAINT PER_ORG_STRUCTURE_ELEMENTS_FK1
FOREIGN KEY (BUSINESS_GROUP_ID)
REFERENCES HR.HR_ALL_ORGANIZATION_UNITS (ORGANIZATION_ID) ;




CREATE INDEX PER_ORG_STRUCTURE_ELEMENTS_FK3 ON
PER_ORG_STRUCTURE_ELEMENTS(ORG_STRUCTURE_VERSION_ID)
TABLESPACE HRX PCTFREE 0 STORAGE(INITIAL 16384 NEXT 8192 PCTINCREASE 0 )
;

CREATE INDEX PER_ORG_STRUCTURE_ELEMENTS_FK4 ON
PER_ORG_STRUCTURE_ELEMENTS(ORGANIZATION_ID_CHILD)
TABLESPACE HRX PCTFREE 0 STORAGE(INITIAL 16384 NEXT 8192 PCTINCREASE 0 )
;

CREATE INDEX PER_ORG_STRUCTURE_ELEMENTS_N50 ON
PER_ORG_STRUCTURE_ELEMENTS(ORG_STRUCTURE_VERSION_ID, ORGANIZATION_ID_PARENT)
TABLESPACE HRX PCTFREE 0 STORAGE(INITIAL 16384 NEXT 16384 PCTINCREASE 0 )
;

CREATE UNIQUE INDEX SDMHR_POSE_IDX ON
PER_ORG_STRUCTURE_ELEMENTS(ORGANIZATION_ID_CHILD, ORG_STRUCTURE_VERSION_ID, ORGANIZATION_ID_PARENT)
TABLESPACE HRX PCTFREE 10 STORAGE(INITIAL 40960 NEXT 40960 PCTINCREASE 0 )
;

CREATE INDEX PER_ORG_STRUCTURE_ELEMENTS_FK1 ON
PER_ORG_STRUCTURE_ELEMENTS(BUSINESS_GROUP_ID)
TABLESPACE HRX PCTFREE 0 STORAGE(INITIAL 16384 NEXT 8192 PCTINCREASE 0 )
;

CREATE INDEX PER_ORG_STRUCTURE_ELEMENTS_FK2 ON
PER_ORG_STRUCTURE_ELEMENTS(ORGANIZATION_ID_PARENT)
TABLESPACE HRX PCTFREE 0 STORAGE(INITIAL 16384 NEXT 8192 PCTINCREASE 0 )
;

Ja wse ege nadejus', chto ti ege zdes' ;-)
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050533
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж:) Посмотри, вот так?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
drop table pa_projects_all cascade constraints;
drop table per_org_structure_elements cascade constraints;

create table per_org_structure_elements (
    organization_id_parent number ( 15 ) not null
  , organization_id_child number ( 15 ) not null
  , constraint pk_per_org_structure_elements primary key (organization_id_parent)
)
/

create table pa_projects_all (
   project_id number ( 15 ) not null
 , carrying_out_organization_id number ( 15 ) not null
 , attribute1 varchar2 ( 150 )
 , constraint pk_pa_projects_all primary key (project_id)
 , constraint fk_pa_projects_all_organiz foreign key (carrying_out_organization_id)
     references per_org_structure_elements (organization_id_parent)
)
/

select o.*
from (
  select o.organization_id_child
       , o.organization_id_parent
       , p.project_id
       , p.attribute1
  from per_org_structure_elements o
     , pa_projects_all p
  where  1 = 1 
    and o.organization_id_parent = p.carrying_out_organization_id (+)
) o
connect by prior o.organization_id_child = o.organization_id_parent
start with o.organization_id_parent is null
/

...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050534
kätzchen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spasibo bol'schoe!
Pobrubuju primenit'
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050537
kätzchen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sluschaj, a ierarchie w projektow -to gde uchitiwaetsja?
Chto-to ja ne dogonjaju ;-)
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050553
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажи, сколько должно быть записей в случае наличия проекта у отдела? Прости, если несколько сумбурно говорю, но хочется понять следующее: допустим, у одного отдела есть один проект. Сколько записей (строк) должно быть в требуемом тебе резалт-сете? Одна запись из 2-х колонок:

код отдела : код проекта

или две записи из 1-й колонки:

код отдела
код проекта

? Разобравшись с этим, пойдем дальше, хотя я с трудом представляю смысл 2-го варианта.
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050661
kätzchen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ugu, wariant nomer raz - eto to samoe. Esli otdel imeet odin projekt, to odna stroka: otdel projekt,
a esli etot projekt imeet ege i podprojekt, wot togda ierarchie i dolgna uchitiwat'sja, to bisch'
odna stroka eto otdel projekt,
a drugaja stroka na meste otdela pusto, na meste projekta toge pusto, a podprojekti, sootwetstwenno, odin pod drugim.
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050697
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри, может это бред сивой кобылы, но вот что у меня получилось:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
drop table pa_projects_all cascade constraints;
drop table per_org_structure_elements cascade constraints;

create table per_org_structure_elements (
   organization_id_child number ( 15 ) not null
 , organization_id_parent number ( 15 )
 , constraint pk_per_org_structure_elements primary key (organization_id_child)
 , constraint fk_per_org_structure_elements foreign key (organization_id_parent)
     references per_org_structure_elements (organization_id_child)
)
/

create table pa_projects_all (
  project_id number ( 15 ) not null
, carrying_out_organization_id number ( 15 ) not null
, attribute1 varchar2 ( 150 )
, constraint pk_pa_projects_all primary key (project_id)
, constraint fk_pa_projects_all_organiz foreign key (carrying_out_organization_id)
    references per_org_structure_elements (organization_id_child)
)
/

delete per_org_structure_elements;

insert into  per_org_structure_elements(organization_id_parent, organization_id_child) values (null,  1 );
insert into  per_org_structure_elements(organization_id_parent, organization_id_child) values (null,  2 );
insert into  per_org_structure_elements(organization_id_parent, organization_id_child) values (null,  3 );
insert into  per_org_structure_elements(organization_id_parent, organization_id_child) values (null,  4 );

insert into  per_org_structure_elements(organization_id_parent, organization_id_child) values ( 1 ,  11 );
insert into  per_org_structure_elements(organization_id_parent, organization_id_child) values ( 1 ,  12 );
insert into  per_org_structure_elements(organization_id_parent, organization_id_child) values ( 1 ,  13 );

insert into  per_org_structure_elements(organization_id_child, organization_id_parent) values ( 21 ,  2 );
insert into  per_org_structure_elements(organization_id_child, organization_id_parent) values ( 22 ,  2 );
insert into  per_org_structure_elements(organization_id_child, organization_id_parent) values ( 23 ,  2 );

insert into  per_org_structure_elements(organization_id_child, organization_id_parent) values ( 31 ,  3 );
insert into  per_org_structure_elements(organization_id_child, organization_id_parent) values ( 32 ,  3 );
insert into  per_org_structure_elements(organization_id_child, organization_id_parent) values ( 33 ,  3 );

commit;

insert into pa_projects_all (project_id, carrying_out_organization_id, attribute1) values ( 101 ,  11 , null);
insert into pa_projects_all (project_id, carrying_out_organization_id, attribute1) values ( 102 ,  12 ,  1 );
insert into pa_projects_all (project_id, carrying_out_organization_id, attribute1) values ( 103 ,  13 ,  1 );


commit;


select decode(o.is_project,  1 , o.organization_id_child) organization_id
    , decode(o.is_project,  1 , o.project_id) project_id
    , decode(o.is_project,  0 , o.attribute1) attribute1
from (
 select p.project_id
      , o.organization_id_child
      , o.organization_id_parent
      , p.attribute1
      ,  1  is_project
 from per_org_structure_elements o
    , pa_projects_all p
 where  1 = 1 
   and o.organization_id_child = p.carrying_out_organization_id (+)
 union all
 select p.project_id
      , o.organization_id_child
      , o.organization_id_parent
      , p.attribute1
      ,  0  is_project
 from per_org_structure_elements o
    , pa_projects_all p
 where  1 = 1 
   and o.organization_id_child = p.carrying_out_organization_id
   and p.attribute1 is not null
) o
connect by prior o.organization_id_child = o.organization_id_parent
start with o.organization_id_parent is null
/
...
Рейтинг: 0 / 0
Hierarchie w SQL
    #32050762
kätzchen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spasibo za pomosch', ja sejchas pischu drugoj zapros, kak tol'ko ja wernus' k etomu, ja poprobuju ispol'zowat' twoju wersiju. Esli interesno, to napischu o rezul'tatax.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Hierarchie w SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]