powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите пожалуйста
3 сообщений из 3, страница 1 из 1
Помогите пожалуйста
    #40064480
dima25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CREATE TABLE model
( id number(10) NOT NULL,
parent varchar2(50) ,
product varchar2(50),
level number(10)
);
INSERT INTO model (id,parent, product,level)
VALUES(1,'NULL','КЭ01',1);
VALUES(2,'КЭ01','КЭ02',2);
VALUES(3,'КЭ01','КЭ03',2);

VALUES(4,'КЭ02','КЭ04',3);
VALUES(5,'КЭ02','КЭ05',3)

ситуация у меня такая нужно узнать все что относиться от первого уровня до третего к примеру, я знаю что КЭ01 это продукт у которого нет родителя, потому что это первый уровень , КЭ02 и КЭ03 это дети второго уровня, дети тоже могут быть дети и эти дети уже третего уровня КЭ02 уже становиться родителем для КЭ04 и Кэ05 вообщем нужно вывести цепочку сверху вниз от первого до третего уровня ПОМОГИТЕ ПОЖАЛУЙСТА
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #40064495
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #40064505
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мессир, не надо задавать бессмысленные названия темам

dima25

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE model
        ( id number(10) NOT NULL,
        parent varchar2(50) ,
        product varchar2(50),
        level number(10)
         );
      INSERT INTO model (id,parent, product,level)    
      VALUES(1,'NULL','КЭ01',1);
      VALUES(2,'КЭ01','КЭ02',2);
      VALUES(3,'КЭ01','КЭ03',2);
    
      VALUES(4,'КЭ02','КЭ04',3);
      VALUES(5,'КЭ02','КЭ05',3)



ситуация у меня такая:
нужно узнать все что относиться от первого уровня до третего.
К примеру, я знаю что КЭ01 это продукт у которого нет родителя, потому что это первый уровень,
КЭ02 и КЭ03 это дети второго уровня,
дети тоже могут быть дети и эти дети уже третего уровня КЭ02 уже становиться родителем для КЭ04 и Кэ05
в общем нужно вывести цепочку сверху вниз от первого до третего уровня

ПОМОГИТЕ ПОЖАЛУЙСТА


Элементарные древовидный запрос:

Oracle Doc
-> SQL Reference -> SELECT

START WITH Clause...
Specify a condition that identifies the row(s) to be used as the root(s) of a hierarchical query. The condition can be any condition as described in Chapter 6, "Conditions". Oracle Database uses as root(s) all rows that satisfy this condition. If you omit this clause, then the database uses all rows in the table as root rows.
...


CONNECT BY Clause...
Specify a condition that identifies the relationship between parent rows and child rows of the hierarchy. The condition can be any condition as described in Chapter 6, "Conditions". However, it must use the PRIOR operator to refer to the parent row.
...



Вот резвитесь:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
WITH t_model (id,parent_name, product_name,lvl) as (
      SELECT 1,NULL,'КЭ01',1 FROM DUAL UNION ALL
      SELECT 2,'КЭ01','КЭ02',2 FROM DUAL UNION ALL
      SELECT 3,'КЭ01','КЭ03',2 FROM DUAL UNION ALL
      SELECT 4,'КЭ02','КЭ04',3 FROM DUAL UNION ALL
      SELECT 5,'КЭ02','КЭ05',3 FROM DUAL  
)      
select rpad('-',level,'--')||'>'||product_name as p from t_model
start with .... 
connect by prior ...
;



памятка:
HOWTO :: Как правильно задавать вопросы
Как мне оформить свое сообщение?
Студентам, желающим помощи

1) Полная постановка задачи (без сокращений)
2) Подготовьте тестовые данные, лучше в виде with
например (не ваш случай):

Код: plsql
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.
-- table 1 with column list
with user_tab(user_id,user_name,registry_date) as (
select 1,'Bob',to_date('11.02.1921 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual union all
select 2,'Max',to_date('11.02.1922 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual union all
select 3,'Jon',to_date('11.02.1923 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual
)
-- table 2 with column list
,user_post(post_id,user_id,parent_post_id,post_date,message) as (
select 100,1,null,to_date('11.02.1923 23:04:00','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 101,2,100,to_date('11.02.1923 23:05:23','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 102,3,100,to_date('11.02.1923 23:05:35','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 103,1,102,to_date('11.02.1923 23:06:00','DD.MM.YYYY HH24:MI:SS'),'How are you' from dual union all
select 104,2,102,to_date('11.02.1923 23:07:05','DD.MM.YYYY HH24:MI:SS'),'All right!' from dual union all
select 105,1,101,to_date('11.02.1923 23:06:21','DD.MM.YYYY HH24:MI:SS'),'Bye' from dual union all
select 106,1,104,to_date('11.02.1923 23:04:37','DD.MM.YYYY HH24:MI:SS'),'Bye' from dual union all
select 107,2,null,to_date('11.02.1923 23:08:56','DD.MM.YYYY HH24:MI:SS'),'Hmm' from dual
)
-- query sample
select

-- level
-- ,u.user_name
-- ,p.message
rpad(to_char(p.post_date,'YYYY-MM-DD HH24:MI:SS  '),20+level*2,' ')||u.user_name||': '||p.message as txt
from 
 user_post p
 join user_tab  u on ( p.user_id = u.user_id)
where p.post_date >= u.registry_date
start with p.parent_post_id is null 
connect by prior p.post_id=p.parent_post_id 
;



3) Покажите что сделали, что получили, без сокращений. ( лучше не в виде screenshot)


4) используйте Тэги, читать код без них неудобно, правильно оформляйте сообщение
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите пожалуйста
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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