Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: connect by  [new]
Elic
Member

Откуда:
Сообщений: 29980
Да ну?
Union определяет структуру набора по первому select.
Неверно.
SQL> select null from dual union all select 0 from dual;

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

            0

2 rows selected.
24 окт 17, 09:57    [20894743]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2788
Да ну?,

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
24 окт 17, 10:00    [20894750]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Озорнитка
Guest
а кстати в моем запросике так-то ошибка была -таки,
на определенных данных зацикливался

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


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

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

простота сопровождения кода с несколькими циклами или написать компактно один, но большой запрос ? что предпочтительнее ?
24 окт 17, 19:00    [20896579]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6727
Озорнитка,

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

А при отсутствии возможности управлять архитектурой и составом данных - под каждую задачу будет своё оптимальное решение, где-то простынёй в виде запроса, где-то пучком циклов.
25 окт 17, 14:40    [20899153]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Озорнитка
Guest
env
Озорнитка,

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

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


а каким образом вы сформируете структуру иерархических данных без иерархии? денормализовать что ли? это же не хранилища
25 окт 17, 15:30    [20899459]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
Озорнитка
а каким образом вы сформируете структуру иерархических данных без иерархии? денормализовать что ли? это же не хранилища

Неплохие результаты показывает такая структура, как классификатор.
25 окт 17, 15:33    [20899484]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Озорнитка
Guest
andrey_anonymous
Озорнитка
а каким образом вы сформируете структуру иерархических данных без иерархии? денормализовать что ли? это же не хранилища

Неплохие результаты показывает такая структура, как классификатор.


можно ссылку ? в гугл по запросу :'oracle проектирование БД классификатор' выдается фигня
25 окт 17, 16:05    [20899627]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
Озорнитка
andrey_anonymous
пропущено...

Неплохие результаты показывает такая структура, как классификатор.

можно ссылку ? в гугл по запросу :'oracle проектирование БД классификатор' выдается фигня

https://ru.wikipedia.org/wiki/Классификатор
25 окт 17, 17:12    [20899868]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Озорнитка
Guest
andrey_anonymous,

спасибо
25 окт 17, 17:54    [20900017]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Загги
Guest
andrey_anonymous
https://ru.wikipedia.org/wiki/Классификатор

Не понимаю, как избавиться от иерархий при хранении иерархических структур.
Допустим, есть один директор, два тимлида и три кодера.
У меня получается такая структура:
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

Есть альтернатива без головной боли, как у топикстартера?
26 окт 17, 07:49    [20900813]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6727
Загги
без головной боли, как у топикстартера?

Головная боль ТС - архитектура, при которой в один запрос собирается "иерархия" через union с условным переходом по факту отсутствия данных в одной из таблиц. А не иерархическая структура как таковая.
26 окт 17, 09:32    [20900957]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Озорнитка
Guest
env
Загги
без головной боли, как у топикстартера?

Головная боль ТС - архитектура, при которой в один запрос собирается "иерархия" через union с условным переходом по факту отсутствия данных в одной из таблиц. А не иерархическая структура как таковая.


ааа. вы имеете в виду ставить жесткие ограничение и констрейнты на саму возможность заполнения таблиц ?
26 окт 17, 10:47    [20901197]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Озорнитка
Guest
andrey_anonymous
Озорнитка
пропущено...

можно ссылку ? в гугл по запросу :'oracle проектирование БД классификатор' выдается фигня

https://ru.wikipedia.org/wiki/Классификатор


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

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

поможете понять вашу мысль ? что имели в виду ?
27 окт 17, 11:58    [20905761]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Апосля вчерашнего
Guest
Там есть раздел про кодирование.
Но смысл очень простой - код классификатора определяет положение элемента в структуре полностью.
К примеру:
1.00.00 - рут
1.01.00 - чилд1-1
1.01.05 - лист
Запросы к такой структуре не требуют connect by - достаточно like
27 окт 17, 12:12    [20905818]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Озорнитка
Guest
попа

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

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


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


блин.
кто там говорил мне , что запрос будет работать не совсем так, как мне кажется ?
был прав .
2 ноя 17, 12:20    [20921575]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Озорнитка
Guest
Апосля вчерашнего
Там есть раздел про кодирование.
Но смысл очень простой - код классификатора определяет положение элемента в структуре полностью.
К примеру:
1.00.00 - рут
1.01.00 - чилд1-1
1.01.05 - лист
Запросы к такой структуре не требуют connect by - достаточно like


спасибо! стало понятно!
2 ноя 17, 12:21    [20921577]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Озорнитка
Guest
вобщем,
поспрашивала у коллег - nocycle мне подходит по причине того, что задвоенные записи- дубли. То есть цикл идет по первой отобранной ветке далее, и меня это устраивает. Тк вторая запись всегда дубль, то есть тот же самый счет, который и был отобран в первой ветке


фух.
2 ноя 17, 12:35    [20921618]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Elic
Member

Откуда:
Сообщений: 29980
Озорнитка
задвоенные записи- дубли
99% - быдлозапрос в основе.
2 ноя 17, 12:36    [20921621]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Озорнитка
Guest
Elic
Озорнитка
задвоенные записи- дубли
99% - быдлозапрос в основе.


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

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

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

у вас есть лучший вариант?
2 ноя 17, 12:42    [20921638]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Озорнитка
Guest
env
Озорнитка,

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
2 ноя 17, 12:45    [20921648]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Stax
Member

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


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

.....
stax
2 ноя 17, 13:00    [20921703]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
Озорнитка
Guest
Stax
Озорнитка
вобщем,
поспрашивала у коллег - nocycle мне подходит по причине того, что задвоенные записи- дубли. То есть цикл идет по первой отобранной ветке далее, и меня это устраивает. Тк вторая запись всегда дубль, то есть тот же самый счет, который и был отобран в первой ветке
фух.


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

.....
stax


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

в данных дубли
2 ноя 17, 13:02    [20921708]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
exp98
Member

Откуда:
Сообщений: 2699
...(prior id)*-1
А, плз, если "на пальцах", что зто означает ?
2 ноя 17, 13:06    [20921719]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
Озорнитка
в данных дубли

Если данных не настолько много, что играет рояль индексный доступ - то устраните дубли на входе в connect by (сгруппируйте, отфильтруйте или, на худой конец, distinct).
2 ноя 17, 13:07    [20921724]     Ответить | Цитировать Сообщить модератору
 Re: connect by  [new]
booby
Member

Откуда:
Сообщений: 2254
exp98
...(prior id)*-1
А, плз, если "на пальцах", что зто означает ?

* - знак умножения
(prior id) - первый множитель
-1 - второй множитель
все вместе означает это обращение знака (prior id)
2 ноя 17, 13:12    [20921741]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Oracle Ответить