Иногда вам нужно иметь ORDER BY
в каждом из разделов, которые необходимо объединить с UNION
.
В этом случае
SELECT * FROM
(
SELECT table1.field1 FROM table1 ORDER BY table1.field1
) DUMMY_ALIAS1
UNION ALL
SELECT * FROM
(
SELECT table2.field1 FROM table2 ORDER BY table2.field1
) DUMMY_ALIAS2
Вторая таблица не может включать имя таблицы в ORDER BY
пункт.
Так...
SELECT table1.field1 FROM table1 ORDER BY table1.field1
UNION
SELECT table2.field1 FROM table2 ORDER BY field1
не выдает исключение
SELECT table1Column1 as col1,table1Column2 as col2
FROM table1
UNION
( SELECT table2Column1 as col1, table1Column2 as col2
FROM table2
)
ORDER BY col1 ASC
(SELECT table1.field1 FROM table1
UNION
SELECT table2.field1 FROM table2) ORDER BY field1
Работа? Помните думают наборы. Получите набор, Вы хотите использовать объединение и затем выполняете свои операции на нем.
Вот является пример от Northwind 2007:
SELECT [Product ID], [Order Date], [Company Name], [Transaction], [Quantity]
FROM [Product Orders]
UNION SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity]
FROM [Product Purchases]
ORDER BY [Order Date] DESC;
пункт ORDER BY просто должен быть последним оператором, после того, как Вы сделали весь свой unioning. Вы можете объединение несколько наборов вместе, затем помещать пункт ORDER BY после последнего набора.
Я думаю, что это делает хорошее задание объяснения.
следующим является Запрос на объединение, который использует пункт ORDER BY:
select supplier_id, supplier_name
from suppliers
where supplier_id > 2000
UNION
select company_id, company_name
from companies
where company_id > 1000
ORDER BY 2;
, Так как имена столбцов отличаются между двумя "избранными" операторами, более выгодно сослаться на столбцы в пункте ORDER BY их положением в наборе результатов.
В этом примере, мы отсортировали результаты по supplier_name
/ company_name
в порядке возрастания, как обозначено "ORDER BY 2".
supplier_name
/ company_name
поля находятся в положении № 2 в наборе результатов.
Взятый отсюда: http://www.techonthenet.com/sql/union.php
SELECT field1 FROM table1
UNION
SELECT field1 FROM table2
ORDER BY field1