#mysql #sql #sql-order-by #derby
#mysql #sql #sql-order-by #дерби
Вопрос:
У меня есть такая таблица:
Name Seats
101 60
102 40
202 100
201 20
Ни один из данных не может быть нулевым, поэтому каждому имени комнаты будет присвоено определенное количество мест. Теперь вот моя проблема:
Когда я запускаю этот SQL-запрос:
select name from rooms
Я получаю этот вывод:
Name
101
102
201
202
Когда я запускаю этот SQL-запрос:
select seats from rooms
Я получаю этот вывод:
Name
60
40
100
20
Обратите внимание, что в моем первом запросе select name from rooms
порядок значений в таблицах меняется, в то время как во втором запросе, когда я выбираю места, порядок остается в силе. Почему это так?
Как я могу исправить свой SQL-запрос, чтобы он не изменял порядок имен моих комнат?
Я бы хотел, чтобы он поддерживал порядок и выводил это:
Name
101
102
202
201
Комментарии:
1. Порядок строк, возвращаемых оператором SELECT без предложения ORDER BY, не определен.
2. @forpas я вижу, так что, думаю, мне просто повезло все это время
Ответ №1:
Таблицы SQL представляют собой неупорядоченные наборы. Наборы результатов SQL неупорядочены, если нет явного ORDER BY
соответствия самому внешнему SELECT
.
Точка.
Если у вас нет an ORDER BY
, вы не должны ожидать упорядочения результатов. Порядок может меняться от одного запуска к другому.
И, даже если у вас есть ORDER BY
, если у вас есть связи (т.Е. Ключи с одинаковыми значениями), Их можно упорядочивать произвольно от одного запуска к следующему.
Комментарии:
1. ооооооооооооооооооо так что мне просто повезло все это время
2. есть идеи, как заставить оба этих запроса выстраиваться в одном порядке? Я не уверен, что я могу заказать, чтобы они совпали
3. @JohnnyRobertson . , , Включите
order by
, например .order by name
4. о, да, вы правы, теперь я понимаю, спасибо!
5. @JohnnyRobertson Да, вам повезло. Просто убедитесь, что вы явно запрашиваете порядок, когда вам это нужно.
Ответ №2:
Вероятно select name
, запрос считывает только индекс (это называется закрытым запросом), а не саму таблицу, создавая другой порядок. Но принцип заключается в том, что вы никогда не должны полагаться на какой-либо конкретный порядок, за исключением случаев, когда он задан предложением order by самого внешнего запроса.
Комментарии:
1. да, казалось, что он упорядочивает его в определенном порядке 101->102->201->202