/ / Як сортувати результати з UNION - mysql, sql, union

Як сортувати результати з UNION - mysql, sql, union

У мене є запит, подібний до цього:

(select @number:=3)
union
(select @number:=2)
union
(select @number:=1)
order by @number ASC

З результатами:

3
2
1

Але мені б хотілося, щоб результати були в порядку зростання:

1
2
3

Як досягти результатів у порядку зростання з таким запитом?

Відповіді:

2 для відповіді № 1

Ви можете обернути UNION у підзапит, спробуйте:

SELECT *
FROM(
SELECT @number := 3 AS number
UNION
SELECT @number := 2 AS number
UNION
SELECT @number := 1 AS number) tmp
ORDER BY number;

Ось а SQL Fiddle приклад


Редагувати, щоб пояснити, що відбувається:

У вашому прикладі, MySQL розглядає кожну групу як свій власний запит (тобто, як ви очікуєте, що об'єднання буде працювати), так що це так, якби у вас було три різних запитів, і тільки третій був замовлений.

Отже, виставляючи спільні запити, у вас є один набір результатів, і весь набір результатів є тим, що впорядковується.


0 для відповіді № 2

Це ваш запит:

(select @number:=3)
union
(select @number:=2)
union
(select @number:=1)
order by @number ASC

Твій order by має константу. це є order by "1" -- @number є змінною, а не ім'ям стовпця. Отже, немає замовлення. Необхідно вказати номер як ім'я стовпця:

select 3 as number
union all
select 2
union all
select 1
order by number;

Ви також повинні використовувати union all замість union, якщо не потрібно додаткове накладне видалення дублікатів.