MySQL - объединение DISTINCT, ORDER BY и LIMIT - PullRequest
1 голос
/ 12 ноября 2011

Мне интересно, чего следует ожидать от SQL-запроса, который включает операторы DISTINCT, ORDER BY и LIMIT. Я думаю, что мой вопрос коренится в неправильном понимании порядка, в котором должны применяться операторы в SQL

Например,

CREATE TABLE test(id int)

SELECT DISTINCT id
FROM test
ORDER BY id
LIMIT 10

Основываясь на моих знаниях SQL, я не вижу, какое (если таковое имеется) из следующего должно произойти

  1. Первые 10 строк test сортируются, затем возвращается список различных id в этом подмножестве
  2. Список всех различных id в тесте сортируется, затем возвращаются первые 10
  3. Список различных id в первых 10 строках test сортируется, а затем возвращается

Если это имеет значение, я использую MySQL (MyISAM)

Ответы [ 2 ]

2 голосов
/ 12 ноября 2011

Сначала ВЫБРАТЬ, затем ЗАКАЗАТЬ ПО, затем ОГРАНИЧИТЬ. Это правда, за исключением нескольких баз данных (ну, я знаю одну), которые имеют ключевые слова TOP и LIMIT. В этом движке LIMIT является частью предложения WHERE (оценивается на уровне SELECT), а TOP применяется после ЗАКАЗА.

2 голосов
/ 12 ноября 2011

Думайте об этом в терминах «внутрь-наружу», поэтому происходит следующее:

  1. Получить список различных идентификаторов
  2. Упорядочить их в порядке возрастания
  3. Список первых 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...