2016-07-01 3 views
0

У меня есть таблица учеников с 8 записями в столбцах [имя, адрес, TotalFees].ORDER BY запрос, дающий два разных выхода

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

же запрос на той же таблице с другим выходом:

enter image description here

+5

Оба они дают результаты в соответствии с гарантиями, что * вы * запросили в вашем 'ПОРЯДКА BY'. Если вам нужны более сильные гарантии, * вы должны запросить их, добавив дополнительные столбцы или выражения (выражения) к этому 'ORDER BY'. –

+0

Это очень хороший пример, что нет абсолютно никакого неявного порядка сортировки ** Каждый вызов может возвращаться с другим порядком, если ваши столбцы для 'ORDER BY' не являются' UNIQUE' в их комбинированных значениях. – Shnugo

+0

... и в чем ваш вопрос? – Thinkeye

ответ

2

Вопрос, который у вас есть, что ключи для order by не однозначно определяют каждую строку. В частности, «khar» повторяется для большинства строк (ваши результаты показывают, что вы используете сортировку без учета регистра).

В базах данных SQL сортировка нестабильна. Стабильная сортировка - это та, которая сохраняет исходный порядок значений с одним и тем же ключом. Поскольку сортировка нестабильна, результаты - для идентичных ключей - могут выходить в любом порядке.

Почему нет стабильного сорта? Это легко увидеть в ретроспективе. Таблицы SQL и наборы результатов представляют неупорядоченные комплектов. Начального заказа нет, поэтому сортировка нестабильна.

Обычный способ адресовать это должен включать уникальный идентификатор в качестве конечного ключа в order by: order by address, id. С вашими данными, однако, непонятно, что такое уникальный ключ.

+0

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

+0

@NiKhilKutewalla. , , Поскольку «порядок по» имеет повторяющиеся значения для ключей, он может создавать разные результаты при каждом запуске. Я думаю, это объясняет, что происходит. –

0

Комбинация адрес и имя не будет производить дубликаты, так что вы можете попробовать это,

select *From student 
order by address,name 

select top 3 * From student 
order by address,name 
+0

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

Смежные вопросы