powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / connect by
51 сообщений из 51, показаны все 3 страниц
connect by
    #39538578
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите. пожалуйста,

вот кусочек моего селекта
select g.c_main_v_id -- , g.id , g.id_1, g.lnk_acc, g.h
,
(select count(b1.ID)
from ibs.Z#RKO_CUR b1
where b1.C_ACC_TRANS = g.id) A$2
from (select acc_num.c_main_v_id,
acc_num.id,
acc_num.c_accs_arr,
acc.id id_1,
lnk.c_account lnk_acc,
null h
from Z#LINK_ACCS lnk, z#AC_FIN acc, z#AC_FIN acc_num
where acc.c_ACCS_ARR = lnk.COLLECTION_ID
and lnk.C_VID in (1920715, 9012478)
and lnk.c_account = acc_num.id
--and acc.id in (46666995947)
union
select nvl(acc_num.c_main_v_id, lnk.c_acc_num) c_main_v_id,
acc_num.id,
acc_num.c_accs_arr,
acc.id id_1,
acc_num.id lnk_acc,
null h
from Z#LINK_ACCS lnk, z#AC_FIN acc, z#AC_FIN acc_num
where acc.c_ACCS_ARR = lnk.COLLECTION_ID
and lnk.C_VID in (1920715, 9012478)
and lnk.c_acc_num = acc_num.c_main_v_id(+)
and acc.c_client_v = acc_num.c_client_v(+)
--and acc.id in (46666995947)
) g
connect by prior g.lnk_acc = g.id_1
start with g.id_1 = v_AccId(i) -- 46666995947

не могу придумать, как сделать, чтобы , если отобрался lnk.c_acc_num - отмечен красным. то есть вот это условие не отработает- connect by prior g.lnk_acc = g.id_1, как мне тогда продолжить бы выполнение цикла ? то есть в коннект бай задать два альтернативныху словия- чтобы в зависимости от того, пустой или заполненный acc_num.c_main_v_id,- соединение шло по разным веткам.

это можно сделать?

заранее благодарна.
сильно. поверьте.
...
Рейтинг: 0 / 0
connect by
    #39538584
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озорнитказаранее благодарна.
сильно. поверьте.Настолько, что соизволил пренебречь тэгом SRC?!
...
Рейтинг: 0 / 0
connect by
    #39538590
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicОзорнитказаранее благодарна.
сильно. поверьте.Настолько, что соизволил пренебречь тэгом SRC?!

соизволилА
...
Рейтинг: 0 / 0
connect by
    #39538591
Загги
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видали мы эту "благодарность" 20858465
...
Рейтинг: 0 / 0
connect by
    #39538594
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
select g.c_main_v_id -- , g.id , g.id_1, g.lnk_acc, g.h
,
(select count(b1.ID)
from ibs.Z#RKO_CUR b1
where b1.C_ACC_TRANS = g.id) A$2
from (select acc_num.c_main_v_id,
acc_num.id,
acc_num.c_accs_arr,
acc.id id_1,
lnk.c_account lnk_acc,
null h
from Z#LINK_ACCS lnk, z#AC_FIN acc, z#AC_FIN acc_num
where acc.c_ACCS_ARR = lnk.COLLECTION_ID
and lnk.C_VID in (1920715, 9012478)
and lnk.c_account = acc_num.id
--and acc.id in (46666995947) 
union
select nvl(acc_num.c_main_v_id, lnk.c_acc_num) c_main_v_id,
acc_num.id,
acc_num.c_accs_arr,
acc.id id_1,
acc_num.id lnk_acc,
null h
from Z#LINK_ACCS lnk, z#AC_FIN acc, z#AC_FIN acc_num
where acc.c_ACCS_ARR = lnk.COLLECTION_ID
and lnk.C_VID in (1920715, 9012478)
and lnk.c_acc_num = acc_num.c_main_v_id(+)
and acc.c_client_v = acc_num.c_client_v(+)
--and acc.id in (46666995947)
) g
connect by prior g.lnk_acc = g.id_1
start with g.id_1 = v_AccId(i) -- 46666995947
...
Рейтинг: 0 / 0
connect by
    #39538596
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗаггиВидали мы эту "благодарность" 20858465

так это причем ? там пример, описывающий связь в другую сторону- не от меня к вам , а от вас ко мне.
А благодарность- это от меня к вам, к той ситуации отношения не имеет
...
Рейтинг: 0 / 0
connect by
    #39538599
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озорнитка,

А менее загруженный селект нельзя было придумать?
Ну или примерчик набросать?

Пока могу сказать:
Озорниткаесли отобрался lnk.c_acc_num - отмечен красным. то есть вот это условие не отработает- connect by prior g.lnk_acc = g.id_1
верю на слово, хтоя подразумеваю что отработает но не так как Вам бы хотелось

Озорниткато есть в коннект бай задать два альтернативныху словия- чтобы в зависимости от того, пустой или заполненный acc_num.c_main_v_id,- соединение шло по разным веткам.
А, извините, какие? Первое prior g.lnk_acc = g.id_1 - вижу (к c_main_v_id отношения не имеет), а второй?
...
Рейтинг: 0 / 0
connect by
    #39538613
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLОзорнитка,

А менее загруженный селект нельзя было придумать?
Ну или примерчик набросать?

Пока могу сказать:
Озорниткаесли отобрался lnk.c_acc_num - отмечен красным. то есть вот это условие не отработает- connect by prior g.lnk_acc = g.id_1
верю на слово, хтоя подразумеваю что отработает но не так как Вам бы хотелось

Озорниткато есть в коннект бай задать два альтернативныху словия- чтобы в зависимости от того, пустой или заполненный acc_num.c_main_v_id,- соединение шло по разным веткам.
А, извините, какие? Первое prior g.lnk_acc = g.id_1 - вижу (к c_main_v_id отношения не имеет), а второй?

все отработает . как надо- поскольку я уже все оттестировала

g.lnk_acc = g.id_1 - имеет отношение к c_main_v_id,

1) спускаемся вниз от acc.id: lnk- по collection_id связано с acc (ACCS_ARR =collection_id и все lnk.id , у которых такой колекшен - относятся к acc ), затем у LNK берем ACCOUNT и теперь принимаем его за acc

2) так же спускаемся вниз от acc: тот же lnk, тот же коллекшион, но теперь счет может быть записан не в виде ссылки ACCOUNT, а просто - норме строкой acc_num. Теперь нам надо в фин счетах найти нужный счет и опять принять его за acc/
Проблема в том, что данные могут быть ошибочны и может быть указан номер счета, который в базе не существует, и в таком случае мне хотелось бы в коннект бай указать другое условие

аналогичный селект (просто с другими условиями) есть для поиска 'вверх', но его смысла нет приводить.
...
Рейтинг: 0 / 0
connect by
    #39538622
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну вообще, для моей практической задачи уже все работает , как нужно- несуществующий счет может быть только в самом низу выборки, и сейчас он отбирается благополучно. во втором union (записанный строкой . а не ссылкой в acc_num несуществующий счет), то есть только перенесенный после миграции номер счета для истории .

а ошибочных данных - я поискала в базе- вроде как пока нет.

но просто стало интересно, а если бы были- то можно ли это сделать одним запросом
...
Рейтинг: 0 / 0
connect by
    #39538643
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
короче, надо было тему под другим ником создать :)

а то злопамятные )
...
Рейтинг: 0 / 0
connect by
    #39538646
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озорнитка,

вникать в прикладную логику Вашего запроса не очень хочеться (в тч напр зачем нужен null h)

подготовте тестовые данные с помощую with "c ошибочными данными"
и покажите результат: есть/получаю, надо ....

мож кто-то и заинтереcуется задачкой/проблемкой, или сами решение найдете на более прозрачных данных

.....
stax
...
Рейтинг: 0 / 0
connect by
    #39538661
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да это колонка для селекта поиска вверх, там оно заполняется, а себе сделала одинаковый набор в обоих запросах, чтобы не запутаться

блен, я with не пользуюсь никогда :(

ну ладно, сделаю, выложу
...
Рейтинг: 0 / 0
connect by
    #39538692
loperf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ооо, таблицы из ЦФТ ;)
...
Рейтинг: 0 / 0
connect by
    #39538701
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
loperfооо, таблицы из ЦФТ ;)

когда я уже уйду от Цфт :(

хочу проста на пл скул.. и еще лучше в придачу с жабой. Ваще была бы счастлива
...
Рейтинг: 0 / 0
connect by
    #39538702
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озорниткаблен, я with не пользуюсь никогда :(


не обязательно with, просто удобно

можна пойти по официальному пути
http://www.sql.ru/forum/rules.aspx
При написании сообщений с просьбой о составлении запроса - хорошим тоном считается предоставление скрипта на создание таблицы и заполнение ее тестовыми данными, а также ожидаемого результата выборки, если это не очевидно из вопроса. Например:
...


....
stax
...
Рейтинг: 0 / 0
connect by
    #39538708
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озорниткакогда я уже уйду от Цфт :(

Паспорт отобрали? :D
...
Рейтинг: 0 / 0
connect by
    #39539360
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озорнитка,

Код: plsql
1.
connect by case when ... 
...
Рейтинг: 0 / 0
connect by
    #39539367
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озорнитка,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t as (
           select 1 id, cast(null as number) parent_id, 0 as flag from dual union all
           select 2 id, 1 parent_id, 0 as flag from dual union all
           select 3 id, 2 parent_id, 0 as flag from dual union all
           select 4 id, -2 parent_id, null as flag from dual
)
select t.*, prior id id_p
from t
connect by (case flag when 0 then prior id else (prior id)*-1 end) = parent_id
start with parent_id is null



Какой вопрос, такой и ответ
...
Рейтинг: 0 / 0
connect by
    #39539454
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня дома нет компа щас,

я на работе вечером, када от меня отстанут пользователи, заведу тестовые таблички. Мож у самой получится додуматься :)
...
Рейтинг: 0 / 0
connect by
    #39539466
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

Можно и так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with t as (
           select 1 id, cast(null as number) parent_id, 0 as flag from dual union all
           select 2 id, 1 parent_id, 0 as flag from dual union all
           select 3 id, 2 parent_id, 0 as flag from dual union all
           select 4 id, -2 parent_id, null as flag from dual
)
select t.*, prior id id_p
from t
connect by --(case flag when 0 then prior id else (prior id)*-1 end) = parent_id
           nvl2(flag, (prior id), (prior id)*-1) = parent_id
start with parent_id is null



Если проблема с null
...
Рейтинг: 0 / 0
connect by
    #39539473
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL,

Case проще расширить, для нескольких условий. Вырожденный случай можно покрыть и более узким решением.
...
Рейтинг: 0 / 0
connect by
    #39540738
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cast(null as number)- это зачем
...
Рейтинг: 0 / 0
connect by
    #39540744
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озорниткаcast(null as number)- это зачем
Тип поля задает.
...
Рейтинг: 0 / 0
connect by
    #39540747
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymousОзорниткаcast(null as number)- это зачем
Тип поля задает.

так и без этого работает

оракл неявно преобразует?
...
Рейтинг: 0 / 0
connect by
    #39540846
Да ну?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Озорниткаandrey_anonymousпропущено...

Тип поля задает.
так и без этого работает
Union определяет структуру набора по первому select.
Вопрос: какого типа поле получается из null?
...
Рейтинг: 0 / 0
connect by
    #39540868
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну?Union определяет структуру набора по первому select.Неверно.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> select null from dual union all select 0 from dual;

         NULL
-------------

            0

2 rows selected.
...
Рейтинг: 0 / 0
connect by
    #39540870
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну?,

Код: 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.
SQL> select 1 id, null d from dual union all
  2  select 1 id, decode(1,1,null,2) d from dual union all
  3  select 1 id, '1' d from dual union all
  4  select 1 id, '3' d from dual
  5  /

        ID D
---------- -
         1
         1
         1 1
         1 3

SQL> select 1 id, null d from dual union all
  2  select 1 id, date '2017-01-01' d from dual
  3  /

        ID D
---------- --------
         1
         1 01.01.17

SQL> ed
Wrote file afiedt.buf

  1  select 1 id, null d from dual union all
  2* select 1 id, 2017.0101 d from dual
SQL> /

        ID          D
---------- ----------
         1
         1  2017,0101



.....
stax
...
Рейтинг: 0 / 0
connect by
    #39541287
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а кстати в моем запросике так-то ошибка была -таки,
на определенных данных зацикливался

но легко исправляемая


а вообще, наверное, лучше избегать использовать слишком массивные запросы? чтобы следующим разрабам было проще сопровождать написанный тобой код ?

или нет? слышала мнение, что , если можно сделать одним запросом- то нужно делать одн им запросом, а не плеядой циклов.
вы как считаете ?

простота сопровождения кода с несколькими циклами или написать компактно один, но большой запрос ? что предпочтительнее ?
...
Рейтинг: 0 / 0
connect by
    #39541794
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озорнитка,

Предпочтительнее формировать архитектуру таким образом, чтобы не требовалось делать подобных запросов.

А при отсутствии возможности управлять архитектурой и составом данных - под каждую задачу будет своё оптимальное решение, где-то простынёй в виде запроса, где-то пучком циклов.
...
Рейтинг: 0 / 0
connect by
    #39541842
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
envОзорнитка,

Предпочтительнее формировать архитектуру таким образом, чтобы не требовалось делать подобных запросов.

А при отсутствии возможности управлять архитектурой и составом данных - под каждую задачу будет своё оптимальное решение, где-то простынёй в виде запроса, где-то пучком циклов.

а каким образом вы сформируете структуру иерархических данных без иерархии? денормализовать что ли? это же не хранилища
...
Рейтинг: 0 / 0
connect by
    #39541847
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озорниткаа каким образом вы сформируете структуру иерархических данных без иерархии? денормализовать что ли? это же не хранилища
Неплохие результаты показывает такая структура, как классификатор .
...
Рейтинг: 0 / 0
connect by
    #39541880
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymousОзорниткаа каким образом вы сформируете структуру иерархических данных без иерархии? денормализовать что ли? это же не хранилища
Неплохие результаты показывает такая структура, как классификатор .

можно ссылку ? в гугл по запросу :'oracle проектирование БД классификатор' выдается фигня
...
Рейтинг: 0 / 0
connect by
    #39541927
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озорниткаandrey_anonymousпропущено...

Неплохие результаты показывает такая структура, как классификатор .
можно ссылку ? в гугл по запросу :'oracle проектирование БД классификатор' выдается фигня
https://ru.wikipedia.org/wiki/Классификатор
...
Рейтинг: 0 / 0
connect by
    #39541956
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

спасибо
...
Рейтинг: 0 / 0
connect by
    #39542127
Загги
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous https://ru.wikipedia.org/wiki/Классификатор
Не понимаю, как избавиться от иерархий при хранении иерархических структур.
Допустим, есть один директор, два тимлида и три кодера.
У меня получается такая структура:
Код: plsql
1.
2.
3.
4.
5.
6.
select 1 id, 'директор' name, 0 chief from dual union
select 2 id, 'тимлид1' name, 1 chief from dual union
select 3 id, 'тимлид2' name, 1 chief from dual union
select 4 id, 'кодер1' name, 2 chief from dual union
select 5 id, 'кодер2' name, 3 chief from dual union
select 6 id, 'кодер3' name, 3 chief from dual


Есть альтернатива без головной боли, как у топикстартера?
...
Рейтинг: 0 / 0
connect by
    #39542160
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заггибез головной боли, как у топикстартера?
Головная боль ТС - архитектура, при которой в один запрос собирается "иерархия" через union с условным переходом по факту отсутствия данных в одной из таблиц. А не иерархическая структура как таковая.
...
Рейтинг: 0 / 0
connect by
    #39542212
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
envЗаггибез головной боли, как у топикстартера?
Головная боль ТС - архитектура, при которой в один запрос собирается "иерархия" через union с условным переходом по факту отсутствия данных в одной из таблиц. А не иерархическая структура как таковая.

ааа. вы имеете в виду ставить жесткие ограничение и констрейнты на саму возможность заполнения таблиц ?
...
Рейтинг: 0 / 0
connect by
    #39543118
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymousОзорниткапропущено...

можно ссылку ? в гугл по запросу :'oracle проектирование БД классификатор' выдается фигня
https://ru.wikipedia.org/wiki/Классификатор

прочитала статью, честно говоря , не поняла, как она соотносится с моей задачей в том контексте, который вы вложили в сообщение (какая-то идеальная структура данных, которая исключит мои проблемы выше, не иерархия)

там три классификации: иерархия, фасеточная и дескрипторная. Из трех мне наиболее понятна иерархия и кажется наиболее удобной для решения моей задачи. То есть такая, какая сейчас и есть.

поможете понять вашу мысль ? что имели в виду ?
...
Рейтинг: 0 / 0
connect by
    #39543133
Там есть раздел про кодирование.
Но смысл очень простой - код классификатора определяет положение элемента в структуре полностью.
К примеру:
1.00.00 - рут
1.01.00 - чилд1-1
1.01.05 - лист
Запросы к такой структуре не требуют connect by - достаточно like
...
Рейтинг: 0 / 0
connect by
    #39546636
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попа

в данных теперь ситуация, что счет забит не строкой- а один и тот же счет забит несколько раз одинаковыми записями. На коих мой большой коннект бай благополучно зацикливается

скажите пожалуйста, а параметр - NOCYCLE - это сильно плохо ?
попробовала использовать - после счета, на котором циклится- есть еще один шаг далее, и он выполняется. То еть отбирается вся цепочка необходимых счетов.


сначала пробовала сделать row_number и брать ограниченное число записей в один отбор (тк проверила запросом, что все задвоенные записи- это тупо дубли). Но ломался план настолько , что невозможно долго.


блин.
кто там говорил мне , что запрос будет работать не совсем так, как мне кажется ?
был прав .
...
Рейтинг: 0 / 0
connect by
    #39546637
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Апосля вчерашнегоТам есть раздел про кодирование.
Но смысл очень простой - код классификатора определяет положение элемента в структуре полностью.
К примеру:
1.00.00 - рут
1.01.00 - чилд1-1
1.01.05 - лист
Запросы к такой структуре не требуют connect by - достаточно like

спасибо! стало понятно!
...
Рейтинг: 0 / 0
connect by
    #39546653
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вобщем,
поспрашивала у коллег - nocycle мне подходит по причине того, что задвоенные записи- дубли. То есть цикл идет по первой отобранной ветке далее, и меня это устраивает. Тк вторая запись всегда дубль, то есть тот же самый счет, который и был отобран в первой ветке


фух.
...
Рейтинг: 0 / 0
connect by
    #39546654
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озорнитказадвоенные записи- дубли99% - быдлозапрос в основе.
...
Рейтинг: 0 / 0
connect by
    #39546657
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicОзорнитказадвоенные записи- дубли99% - быдлозапрос в основе.

ну второй вариант - это куча циклов. Если данные такие корявые, какое бы вы предложили другое решение ?

по поводу нормализации данных - предлагала аналитику. Он отказал , основываясь на том, что задача слишком большая, поскольку нужно будет проанализировать и выявить весь функционал, который эти корявые данные плодит.

остается только на них закладываться значит.
что может быть:
1) запись одной информации в разных атрибутах (отсюда разный алгоритм поиска счета для продолжения цикла) :
- в одном случае ссылкой на счет
- в другом случае просто строкой
2) дубли (в этом случае подойдет отобрать один первый счет, остальные записи пропустить, тк они дубли)

у вас есть лучший вариант?
...
Рейтинг: 0 / 0
connect by
    #39546660
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
envОзорнитка,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t as (
           select 1 id, cast(null as number) parent_id, 0 as flag from dual union all
           select 2 id, 1 parent_id, 0 as flag from dual union all
           select 3 id, 2 parent_id, 0 as flag from dual union all
           select 4 id, -2 parent_id, null as flag from dual
)
select t.*, prior id id_p
from t
connect by (case flag when 0 then prior id else (prior id)*-1 end) = parent_id
start with parent_id is null



Какой вопрос, такой и ответ

кстати, интересное сообщение
не знала, что можно колонки для отбора в иерархическом запросе писать (prior id)*-1 и использовать case в условии connect by
...
Рейтинг: 0 / 0
connect by
    #39546673
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озорниткавобщем,
поспрашивала у коллег - nocycle мне подходит по причине того, что задвоенные записи- дубли. То есть цикл идет по первой отобранной ветке далее, и меня это устраивает. Тк вторая запись всегда дубль, то есть тот же самый счет, который и был отобран в первой ветке
фух.

дубли действительно из-за данных, или возможно из-за "соеденения" таблиц?

.....
stax
...
Рейтинг: 0 / 0
connect by
    #39546676
Озорнитка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StaxОзорниткавобщем,
поспрашивала у коллег - nocycle мне подходит по причине того, что задвоенные записи- дубли. То есть цикл идет по первой отобранной ветке далее, и меня это устраивает. Тк вторая запись всегда дубль, то есть тот же самый счет, который и был отобран в первой ветке
фух.

дубли действительно из-за данных, или возможно из-за "соеденения" таблиц?

.....
stax

первым делом проверила

в данных дубли
...
Рейтинг: 0 / 0
connect by
    #39546679
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...(prior id)*-1 А, плз, если "на пальцах", что зто означает ?
...
Рейтинг: 0 / 0
connect by
    #39546682
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озорниткав данных дубли
Если данных не настолько много, что играет рояль индексный доступ - то устраните дубли на входе в connect by (сгруппируйте, отфильтруйте или, на худой конец, distinct).
...
Рейтинг: 0 / 0
connect by
    #39546688
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98 ...(prior id)*-1 А, плз, если "на пальцах", что зто означает ?
* - знак умножения
(prior id) - первый множитель
-1 - второй множитель
все вместе означает это обращение знака (prior id)
...
Рейтинг: 0 / 0
connect by
    #39546839
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спсб, обомилось, я надеялся на нечто вроде "ссылки на предыдущее" по типу указателей Си.
...
Рейтинг: 0 / 0
51 сообщений из 51, показаны все 3 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / connect by
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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