2013-02-01 6 views
0

Я делаю следующий запрос:SELECT DISTINCT без упорядочения строк

SELECT DISTINCT column1, colum2 FROM table.... WHERE.... 

, но я не хочу, чтобы результат, возвращаемый были в порядке. Как я могу избежать этого sql сортировать эти строки?

+3

Данные не заданы, если вы не используете 'ORDER BY'. О чем вы говорите? – Taryn

ответ

7

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

SELECT * 
FROM (SELECT DISTINCT column1, colum2 
     FROM table.... 
     WHERE....) A 
ORDER BY NEWID() 

FIDDLE DEMO

+1

+1 хорошее описание. – Kermit

+0

@njk Это не работает [DEMO] (http://sqlfiddle.com/#!3/1da9f/3). Чтобы иметь возможность заказать список 'DISTINCT',' ORDER BY column' должен находиться в списке SELECT, но если вы добавите newid() в список выбора, он не даст ожидаемых результатов. – Kaf

+0

@ Kaf, вы правы, я обновил свой ответ. Спасибо – Lamak

1

ORDER BY не требуется для SELECT DISTINCT (или что-нибудь еще) ... Каких заказ вы видите? Возможно, данные были заказаны, когда они были введены в систему.

+0

алфавиту, но мне нужно, что данные показывают без упорядочения. – omixam

0

select distinct должен идентифицировать повторяющиеся строки. Есть два способа сделать это. Один из них - сортировка данных (что может быть сделано неявно с использованием индекса). Затем повторяющиеся строки появляются рядом друг с другом. Другой - построить хеш-таблицу. Дублированные строки отображаются в тех же хэш-кодах.

Для вашего запроса SQL Server выбирает сортировку данных. Похоже, что данные заказываются. В многопоточной системе данные выглядят как, но когда вы прокручиваете их, вы обнаружите, что сортировка выполняется в кусках (поскольку данные возвращаются из каждого потока).

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