Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по порядку записей / 14 сообщений из 14, страница 1 из 1
04.07.2019, 15:33
    #39833883
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по порядку записей
У меня есть запрос примерно такого вида:
Код: plsql
1.
2.
3.
select ... from table1 where pk=value1
union all
select ... from table2 where ...


Каждый "подзапрос" может возвратить 0 или 1 строку.
То есть запрос может возвратить от нуля до двух строк.
Меня интересует в первую очередь строка с table1, если ее нет, только тогда строка с table2.
Поэтому в клиентском коде я просто считываю первую строку и работаю с ней.
Можно ли полагаться на то, что порядок записей в выборке всегда будет именно таким?
Или для гарантии нужно добавить столбец (со значением 1 для первого "подзапроса" и 2 для второго), засунуть в подзапрос и добавить order by?
...
Рейтинг: 0 / 0
04.07.2019, 15:41
    #39833887
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по порядку записей
Без order by на порядок полагаться нельзя. Это основы SQL.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.07.2019, 15:45
    #39833890
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по порядку записей
Alibek B.Меня интересует в первую очередь строка с table1, если ее нет, только тогда строка с table2.

Тогда лучше вообще не посылать второй запрос если из первого что-то пришло. И тебе легче,
и серверу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.07.2019, 16:01
    #39833901
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по порядку записей
Dimitry SibiryakovБез order by на порядок полагаться нельзя. Это основы SQL.
Здравый смысл мне подсказывает, что сервер не будет специально перемешивать записи.
Добавить сортировку несложно, но мне она кажется избыточной.
В плане выполнения union-all присутствует и я не вижу причины, почему сервер может поменять порядок выполнения отдельных запросов.

Dimitry SibiryakovТогда лучше вообще не посылать второй запрос если из первого что-то пришло. И тебе легче,
и серверу.
Я считал, что два отдельных запроса выполняются дольше и требуют больше внимания сервера, чем один запрос, склеенный из двух.
...
Рейтинг: 0 / 0
04.07.2019, 16:07
    #39833910
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по порядку записей
Alibek B.Я считал

Ты ошибался. Как и твой здравый смысл.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.07.2019, 16:12
    #39833913
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по порядку записей
Dimitry SibiryakovAlibek B.Я считал

Ты ошибался.
один запрос может быть быстрее нескольких, все зависит от статистики
...
Рейтинг: 0 / 0
04.07.2019, 16:41
    #39833945
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по порядку записей
Alibek B.Здравый смысл мне подсказывает, что сервер не будет специально перемешивать записи.Здравый смысл подсказывает, что concurrent union "не будет специально перемешивать записи".
...
Рейтинг: 0 / 0
04.07.2019, 16:49
    #39833956
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по порядку записей
-2-Alibek B.Здравый смысл мне подсказывает, что сервер не будет специально перемешивать записи.Здравый смысл подсказывает, что concurrent union "не будет специально перемешивать записи".А неконкурент гарантированно не будет перемешивать? https://docs.oracle.com/database/121/VLDBG/GUID-1F4C90F9-3EF5-423A-B55B-2593FB3F1433.htm However, unlike the sequential processing of one branch after another, the concurrent processing does not guarantee an ordered return of the results of the individual branches. If an ordered return of one branch after another is required, then you either must disable concurrent processing using the NO_PQ_CONCURRENT_UNION hint or you must augment the SQL statement to uniquely identify individual branches of the statement and to sort on this specified identifier.
...
Рейтинг: 0 / 0
04.07.2019, 18:30
    #39834008
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по порядку записей
просто добавить rownum=1 - он отключает все оптимизации типа concurent_unionAlibek B.
Код: plsql
1.
2.
3.
4.
5.
6.
select * from (
select ... from table1 where pk=value1
union all
select ... from table2 where ...
)
where rownum=1
...
Рейтинг: 0 / 0
04.07.2019, 18:31
    #39834009
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по порядку записей
Dimitry SibiryakovТы ошибался. Как и твой здравый смысл.зависит от запроса
...
Рейтинг: 0 / 0
04.07.2019, 18:59
    #39834029
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по порядку записей
xtenderпросто добавить rownum=1
Сегодня отключает, завтра - перестанет...
...
Рейтинг: 0 / 0
04.07.2019, 19:03
    #39834031
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по порядку записей
xtenderпросто добавить rownum=1
Спасибо за совет, но если делать так, то надёжнее добавить столбец с числом и сортировку по нему.
...
Рейтинг: 0 / 0
05.07.2019, 10:14
    #39834209
Ryuu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по порядку записей
Alibek B. Меня интересует в первую очередь строка с table1, если ее нет, только тогда строка с table2.
Зачем заморачиваться с сортировкой, если проблему можно решить банальным оператором CASE?
...
Рейтинг: 0 / 0
05.07.2019, 10:49
    #39834237
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по порядку записей
Это каким образом?
Скалярный подзапрос в нем указать?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по порядку записей / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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