powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по порядку записей
14 сообщений из 14, страница 1 из 1
Вопрос по порядку записей
    #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
Вопрос по порядку записей
    #39833887
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без order by на порядок полагаться нельзя. Это основы SQL.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по порядку записей
    #39833890
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Меня интересует в первую очередь строка с table1, если ее нет, только тогда строка с table2.

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

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

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

Ты ошибался.
один запрос может быть быстрее нескольких, все зависит от статистики
...
Рейтинг: 0 / 0
Вопрос по порядку записей
    #39833945
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Здравый смысл мне подсказывает, что сервер не будет специально перемешивать записи.Здравый смысл подсказывает, что concurrent union "не будет специально перемешивать записи".
...
Рейтинг: 0 / 0
Вопрос по порядку записей
    #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
Вопрос по порядку записей
    #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
Вопрос по порядку записей
    #39834009
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Dimitry SibiryakovТы ошибался. Как и твой здравый смысл.зависит от запроса
...
Рейтинг: 0 / 0
Вопрос по порядку записей
    #39834029
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderпросто добавить rownum=1
Сегодня отключает, завтра - перестанет...
...
Рейтинг: 0 / 0
Вопрос по порядку записей
    #39834031
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderпросто добавить rownum=1
Спасибо за совет, но если делать так, то надёжнее добавить столбец с числом и сортировку по нему.
...
Рейтинг: 0 / 0
Вопрос по порядку записей
    #39834209
Фотография Ryuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B. Меня интересует в первую очередь строка с table1, если ее нет, только тогда строка с table2.
Зачем заморачиваться с сортировкой, если проблему можно решить банальным оператором CASE?
...
Рейтинг: 0 / 0
Вопрос по порядку записей
    #39834237
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это каким образом?
Скалярный подзапрос в нем указать?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по порядку записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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