powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / connect by
25 сообщений из 51, страница 2 из 3
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
25 сообщений из 51, страница 2 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / connect by
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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