Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 UNION and ORDER BY  [new]
TJ
Member

Откуда:
Сообщений: 274
use Pubs go
SELECT address FROM authors ORDER BY phone UNION ALL
SELECT city FROM authors
/*Однако UNION не позволяет использовать отсортированные таблицы - как это обойти, неужели придёться создавать дополнительную таблицу вставлять туда отсортированный данные!!!*/
15 янв 05, 15:48    [1247573]     Ответить | Цитировать Сообщить модератору
 Re: UNION and ORDER BY  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Не понял вопроса !!!
После последнего SELECT применяйте ORDER BY .... Возможно, не по именам столбцов, а по их номерам: ORDER BY 1,3 DESC, 4...
С уважением, Алексей.
15 янв 05, 16:13    [1247599]     Ответить | Цитировать Сообщить модератору
 Re: UNION and ORDER BY  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Только поле по которой выполняется сортировка, обязательно надо перечислить в списке полей в SELECT
15 янв 05, 16:15    [1247601]     Ответить | Цитировать Сообщить модератору
 Re: UNION and ORDER BY  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
TJ
use Pubs go
SELECT address FROM authors ORDER BY phone UNION ALL
SELECT city FROM authors
/*Однако UNION не позволяет использовать отсортированные таблицы - как это обойти, неужели придёться создавать дополнительную таблицу вставлять туда отсортированный данные!!!*/

А смысл запрса какой?
15 янв 05, 17:40    [1247674]     Ответить | Цитировать Сообщить модератору
 Re: UNION and ORDER BY  [new]
skiw
Member

Откуда:
Сообщений: 21
смысл в запросе - пример...

а вот и решение:
SELECT a.address FROM
(SELECT top 100 percent address, phone FROM authors ORDER BY phone ) a
UNION ALL
SELECT city FROM authors
15 янв 05, 22:48    [1247876]     Ответить | Цитировать Сообщить модератору
 Re: UNION and ORDER BY  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
skiw
смысл в запросе - пример...

а вот и решение:
SELECT a.address FROM
(SELECT top 100 percent address, phone FROM authors ORDER BY phone ) a
UNION ALL
SELECT city FROM authors

По какому принципу должны быть отсортированы записи в окончательном наборе?
Сначала все адреса авторов, отсортированные по телефонам, а потом все города, отсортированные никак?
Вот я и спрашиваю про смысл ...
15 янв 05, 23:10    [1247887]     Ответить | Цитировать Сообщить модератору
 Re: UNION and ORDER BY  [new]
Glory
Member

Откуда:
Сообщений: 104760
skiw
смысл в запросе - пример...

а вот и решение:
SELECT a.address FROM
(SELECT top 100 percent address, phone FROM authors ORDER BY phone ) a
UNION ALL
SELECT city FROM authors

Без указания ORDER BY во внешнем запросе сортировка результатов будет произвольной. То, что она на данный момент совпадает с той, которая нужна вам, ен означает что завтра(или на другой машине) все будет точно также.
16 янв 05, 13:27    [1248075]     Ответить | Цитировать Сообщить модератору
 Re: UNION and ORDER BY  [new]
skiw
Member

Откуда:
Сообщений: 21
Glory
skiw
смысл в запросе - пример...

а вот и решение:
SELECT a.address FROM
(SELECT top 100 percent address, phone FROM authors ORDER BY phone ) a
UNION ALL
SELECT city FROM authors

Без указания ORDER BY во внешнем запросе сортировка результатов будет произвольной. То, что она на данный момент совпадает с той, которая нужна вам, ен означает что завтра(или на другой машине) все будет точно также.


т.е. запрос типа:
SELECT a.address FROM
(SELECT top 100 percent address, phone FROM authors ORDER BY phone ) a
UNION ALL
SELECT b.city FROM (
SELECT top 100 percent city FROM authors order by city) b

не гарантирует, что в результате будут сначала все address, отсортированые по phone, а потом все city, отсортированые по city ?

тогда зачем сделано это условие:
The ORDER BY clause is invalid in views, inline functions, derived tables, and subqueries, unless TOP is also specified.
?

как я понимаю сначала делается выборка по первому подзапросу, её результат помещается в результат всего запроса, потом делается выборка по второму подзапросу и её результат добавляется в результат всего запроса потом возвращается результат всего запроса, т.о. если подзапросы отсортированы, в таком порядке мы их и получим в конце

(может я и ошибаюсь, глубоко я не копал, я написал, как я понимаю, как оно работает)

а по поводу смысла такого запроса - скорее всего автор хотел узнать, как можно сортировать подзапрос и привёл простой пример...
16 янв 05, 14:26    [1248120]     Ответить | Цитировать Сообщить модератору
 Re: UNION and ORDER BY  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
автор
не гарантирует, что в результате будут сначала все address, отсортированые по phone, а потом все city, отсортированые по city ?

Отнюдь.
select adress
from(
  SELECT percent address, phone as sort, 0 as rank FROM authors 
  UNION ALL
  SELECT city, city as sort FROM authors, 1 as rank
) a
order by rank, sort
16 янв 05, 14:49    [1248128]     Ответить | Цитировать Сообщить модератору
 Re: UNION and ORDER BY  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
Гавриленко Сергей Алексеевич
select adress
from(
  SELECT percent address, phone as sort, 0 as rank FROM authors 
  UNION ALL
  SELECT city, city as sort FROM authors, 1 as rank
) a
order by rank, sort

Опечатка.
select adress
from(
  SELECT percent address, phone as sort, 0 as rank FROM authors 
  UNION ALL
  SELECT city, city as sort, 1 as rank FROM authors
) a
order by rank, sort
16 янв 05, 14:58    [1248135]     Ответить | Цитировать Сообщить модератору
 Re: UNION and ORDER BY  [new]
Glory
Member

Откуда:
Сообщений: 104760
как я понимаю сначала делается выборка по первому подзапросу, её результат помещается в результат всего запроса, потом делается выборка по второму подзапросу и её результат добавляется в результат всего запроса потом возвращается результат всего запроса, т.о. если подзапросы отсортированы, в таком порядке мы их и получим в конце
Нет.
Вы думаете про _логику_ запроса.
В то время как сервер осуществляет _физику_ запроса. Которая видна из плана выполнения запроса. Почему бы серверу на много процессорной машине не выполнять эти запросы одновременно ?

Кроме того, на сервере, предназначенном для многопользовательского обслуживанию, существуют еще скажем кэширование данных, параллельное выполнение запросов, совмещение физического чтения с диска для разных коннектов и многое другое.
16 янв 05, 15:01    [1248138]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить