powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сортировка во внутреннем запросе
4 сообщений из 4, страница 1 из 1
Сортировка во внутреннем запросе
    #40021787
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня,

Если я делаю "select *" из уже отсортированного запроса, есть ли гарантия такого же порядок строк, или нужно сортировать заново?

Код: sql
1.
2.
select top 1 * from 
   (select prod_name from products ordered by price)



Например, такой код вернёт самый дешёвый товар в базе (если select top 1 * уважает уже созданный внутренним запросом порядок), или может вернуть любую одну из строк?

Интересует не поведение конкретной версии, а именно гарантии задокументированные или в документации, или в одном из стандартов sql.
...
Рейтинг: 0 / 0
Сортировка во внутреннем запросе
    #40021800
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL,

для выражения TOP требуется сортировка, иначе Вы получите какой попало. Да и семантически это неверно, получите ошибку выполнения.
...
Рейтинг: 0 / 0
Сортировка во внутреннем запросе
    #40021832
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

Спасибо за комментарий. Мой пример был действительно синтаксически неверен.

С помощью https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=27eefc71860b5805de303d45cb7adb42 я подправил запрос для SQL 2019.
В процессе узнал что:
- "order by" запрещена в подзапросах, если нет дополнительных операторов - я добавил "top 2".
- "top 1" не ругается при полном отсутствии сортировки, хотя наверное мог бы замечать, если это означает "любую строку".

Код: sql
1.
2.
3.
4.
5.
with products(sku,price) as (
  select 'toothbrush', 2.99 union all
  select 'bicycle', 149
)
select top 1 * from (select top 2 sku from products order by price) t



Вот вопрос проще: можно ли ожидать что следующая конструкция выдаст отсортированный список?
Код: sql
1.
select * from (select top 100 sku from products order by price) t



Если нет, то это сочетается с общим правилом "любой запрос может переупорядочить строки".
Если да, то запрос "select *" без фильтров является одним из исключений.

Этот вопрос академический, относится к стандарту (или документированному поведению),
ответы на вопросы "как обучно себя ведет определенная версия на практике" или
"как лучше написать запрос чтоб уж наверняка" мне известны.
...
Рейтинг: 0 / 0
Сортировка во внутреннем запросе
    #40021836
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://docs.microsoft.com/en-us/sql/t-sql/queries/top-transact-sql?view=sql-server-ver15 In a SELECT statement, always use an ORDER BY clause with the TOP clause. Because, it's the only way to predictably indicate which rows are affected by TOP.


Модератор: Ответ на вопрос по ссылке. Тема закрыта
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сортировка во внутреннем запросе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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