Повторяемые результаты при использовании ORDER BY - PullRequest
2 голосов
/ 17 марта 2011

Скажем, у нас есть таблица с ID столбца (уникальные значения) и кода (не уникальные).Там нет операций вставки / удаления / обновления, то есть это своего рода константа.Мы хотим, чтобы он сортировался по коду:

select ID, Code from T1 order by Code

Итак, мы получаем что-то вроде:

 4  'a'
 9  'a'
 1  'b'
 3  'b'

Гарантирует ли стандарт SQL или конкретные реализации (которые затем) гарантируют упорядочение идентификаторов при последующих выборках?Я имею в виду, что мы не получаем что-то вроде:

 9  'a'
 4  'a'
 1  'b'
 3  'b'

Ответы [ 6 ]

5 голосов
/ 17 марта 2011

Вы можете сделать это таким образом:

select ID, Code from T1 order by Code, ID
2 голосов
/ 17 марта 2011

Нет определенного порядка по умолчанию в стандарте SQL. Это означает, что ваш движок БД может возвращать строки в любом порядке, который он выберет (скорее всего, порядок, в котором строки могут быть возвращены наиболее эффективно).

Учитывая эту структуру таблицы, строки, скорее всего, будут возвращаться либо в порядке вставки, либо в порядке, заданном первичным ключом, но это не то, от чего вы можете зависеть, не задав предложение ORDER BY.

2 голосов
/ 17 марта 2011

Заказ гарантируется только предложением ORDER BY.Вы должны добавить еще один столбец в предложение, чтобы сделать результаты повторяемыми.

1 голос
/ 17 марта 2011

Если нет никаких изменений в БД, то вы должны увидеть то же самое, что они будут просто выводиться в том порядке, в котором они существуют в базе данных, и у БД нет причин переупорядочивать записи, если нет вставки / обновления , Однако я не верю, что есть какая-либо гарантия, и вы можете столкнуться с ситуациями, когда некоторые записи находятся в кеше памяти, а некоторые - нет, что может изменить порядок в зависимости от конкретного механизма БД, который вы используете. использование.

0 голосов
/ 17 марта 2011

Вы можете использовать свой собственный порядок для обоих столбцов

select id, code from t1 order by code asc, id asc

Хотя по умолчанию все равно возрастает, однако я явно упомянул, что вы можете указать порядок для обоих столбцов отдельно как asc or desc

0 голосов
/ 17 марта 2011

Порядок строк гарантируется только при указании ORDER BY.

У вас есть пример, где вам нужен гарантированный заказ, но по какой-то причине вы не можете использовать ORDER BY?

...