|
Сортировка во внутреннем запросе
|
|||
---|---|---|---|
#18+
Доброго дня, Если я делаю "select *" из уже отсортированного запроса, есть ли гарантия такого же порядок строк, или нужно сортировать заново? Код: sql 1. 2.
Например, такой код вернёт самый дешёвый товар в базе (если select top 1 * уважает уже созданный внутренним запросом порядок), или может вернуть любую одну из строк? Интересует не поведение конкретной версии, а именно гарантии задокументированные или в документации, или в одном из стандартов sql. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 17:00 |
|
Сортировка во внутреннем запросе
|
|||
---|---|---|---|
#18+
НеофитSQL, для выражения TOP требуется сортировка, иначе Вы получите какой попало. Да и семантически это неверно, получите ошибку выполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 17:43 |
|
Сортировка во внутреннем запросе
|
|||
---|---|---|---|
#18+
Владислав Колосов, Спасибо за комментарий. Мой пример был действительно синтаксически неверен. С помощью https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=27eefc71860b5805de303d45cb7adb42 я подправил запрос для SQL 2019. В процессе узнал что: - "order by" запрещена в подзапросах, если нет дополнительных операторов - я добавил "top 2". - "top 1" не ругается при полном отсутствии сортировки, хотя наверное мог бы замечать, если это означает "любую строку". Код: sql 1. 2. 3. 4. 5.
Вот вопрос проще: можно ли ожидать что следующая конструкция выдаст отсортированный список? Код: sql 1.
Если нет, то это сочетается с общим правилом "любой запрос может переупорядочить строки". Если да, то запрос "select *" без фильтров является одним из исключений. Этот вопрос академический, относится к стандарту (или документированному поведению), ответы на вопросы "как обучно себя ведет определенная версия на практике" или "как лучше написать запрос чтоб уж наверняка" мне известны. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 19:17 |
|
Сортировка во внутреннем запросе
|
|||
---|---|---|---|
#18+
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. Модератор: Ответ на вопрос по ссылке. Тема закрыта ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 19:25 |
|
|
start [/forum/topic.php?fid=46&fpage=41&tid=1685379]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
others: | 292ms |
total: | 408ms |
0 / 0 |