Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / иерархический запрос (выбрать элементы у которых количество подэлементов больше 2х) / 10 сообщений из 10, страница 1 из 1
18.01.2017, 13:27
    #39386811
HolyMacaroni
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархический запрос (выбрать элементы у которых количество подэлементов больше 2х)
Добрый день не могли бы подсказать как с помощью connect by prior выбрать элементы у которых количество подэлементов больше 2х.
Таблица:
id element id_parent
1 a null
2 aa 1
3 ab 1
4 ac 1
5 aaa 2
6 aac 2
7 aad 2
8 aaaa 5
9 aaab 5
10 aaac 5
11 aba 3
12 abb 3
13 abc 3
14 aca 4
15 acb 4
16 acc 4
17 aaca 6
18 aacb 6
19 aacc 6

правильный результат:
1 a null
...
Рейтинг: 0 / 0
18.01.2017, 13:48
    #39386840
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархический запрос (выбрать элементы у которых количество подэлементов больше 2х)
HolyMacaroniправильный результат:
1 a nullДа ну?
...
Рейтинг: 0 / 0
18.01.2017, 16:17
    #39386972
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархический запрос (выбрать элементы у которых количество подэлементов больше 2х)
HolyMacaroni,

что Вы подразымеваете под термином "подэлемент"?

Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
SQL> ed
Wrote file afiedt.buf

  1  with t (id,element,id_parent) as (
  2  select 1,'a',null from dual union all
  3  select 2,'aa',1 from dual union all
  4  select 3,'ab',1 from dual union all
  5  select 4,'ac',1 from dual union all
  6  select 5,'aaa',2 from dual union all
  7  select 6,'aac',2 from dual union all
  8  select 7,'aad',2 from dual union all
  9  select 8,'aaaa',5 from dual union all
 10  select 9,'aaab',5 from dual union all
 11  select 10,'aaac',5 from dual union all
 12  select 11,'aba',3 from dual union all
 13  select 12,'abb',3 from dual union all
 14  select 13,'abc',3 from dual union all
 15  select 14,'aca',4 from dual union all
 16  select 15,'acb',4 from dual union all
 17  select 16,'acc',4 from dual union all
 18  select 17,'aaca',6 from dual union all
 19  select 18,'aacb',6 from dual union all
 20  select 19,'aacc',6 from dual
 21  )
 22  select id,id_parent,level,rpad(' ',(level-1)*2,' ')||element element from t
 23  start with id_parent is null
 24* connect by id_parent=prior id
SQL> /

        ID  ID_PARENT      LEVEL ELEMENT
---------- ---------- ---------- --------------------
         1                     1 a
         2          1          2   aa
         5          2          3     aaa
         8          5          4       aaaa
         9          5          4       aaab
        10          5          4       aaac
         6          2          3     aac
        17          6          4       aaca
        18          6          4       aacb
        19          6          4       aacc
         7          2          3     aad
         3          1          2   ab
        11          3          3     aba
        12          3          3     abb
        13          3          3     abc
         4          1          2   ac
        14          4          3     aca
        15          4          3     acb
        16          4          3     acc

19 rows selected.



ps
желательно тестовые данные в виде "таблички"

......
stax
...
Рейтинг: 0 / 0
18.01.2017, 17:05
    #39387019
HolyMacaroni
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархический запрос (выбрать элементы у которых количество подэлементов больше 2х)
ElicHolyMacaroniправильный результат:
1 a nullДа ну?
Ошибся, верный результат в таком случае будет:
'1', 'a', NULL
'2', 'aa', '1'
...
Рейтинг: 0 / 0
18.01.2017, 17:08
    #39387022
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархический запрос (выбрать элементы у которых количество подэлементов больше 2х)
HolyMacaroniОшибся, верный результат в таком случае будет:
'1', 'a', NULL
'2', 'aa', '1'Всё равно не соответствует хотелке. http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
18.01.2017, 17:13
    #39387027
HolyMacaroni
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархический запрос (выбрать элементы у которых количество подэлементов больше 2х)
stax..,

я имею ввиду, что есть дерево, надо найти элементы у которых цепочка подэлементов длинной больше 2х и реализовать это через connect by prior
...
Рейтинг: 0 / 0
18.01.2017, 17:28
    #39387044
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархический запрос (выбрать элементы у которых количество подэлементов больше 2х)
HolyMacaroniу которых цепочка подэлементов длинной больше 2хТ.е. есть внуки?!
...
Рейтинг: 0 / 0
18.01.2017, 17:29
    #39387045
HolyMacaroni
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархический запрос (выбрать элементы у которых количество подэлементов больше 2х)
Elic,

точно
...
Рейтинг: 0 / 0
18.01.2017, 17:39
    #39387051
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархический запрос (выбрать элементы у которых количество подэлементов больше 2х)
HolyMacaroniElic,

точно
очевидно (и достаточно) level оценить
...
Рейтинг: 0 / 0
18.01.2017, 17:40
    #39387053
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархический запрос (выбрать элементы у которых количество подэлементов больше 2х)
HolyMacaronistax..,

я имею ввиду, что есть дерево, надо найти элементы у которых цепочка подэлементов длинной больше 2х и реализовать это через connect by prior
на 11-ке слетело
на 12-ке вроде пашет

Код: 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.
with t (id,element,id_parent) as (
select 1,'a',null from dual union all
select 2,'aa',1 from dual union all
select 3,'ab',1 from dual union all
select 4,'ac',1 from dual union all
select 5,'aaa',2 from dual union all
select 6,'aac',2 from dual union all
select 7,'aad',2 from dual union all
select 8,'aaaa',5 from dual union all
select 9,'aaab',5 from dual union all
select 10,'aaac',5 from dual union all
select 11,'aba',3 from dual union all
select 12,'abb',3 from dual union all
select 13,'abc',3 from dual union all
select 14,'aca',4 from dual union all
select 15,'acb',4 from dual union all
select 16,'acca',15 from dual union all
select 17,'aaca',6 from dual union all
select 18,'aacb',6 from dual union all
select 19,'aacc',6 from dual 
)
select t.* from t
where exists (
  select 1 from t t2
  where level>2
  start with t2.id=t.id 
  connect by t2.id_parent=prior t2.id and level<=3
)
/



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


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