2015-05-26 3 views
0

У меня есть запрос, как это:Как сортировать результаты UNION

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

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

3 
2 
1 

Но я хотел бы результаты в порядке возрастания, как это:

1 
2 
3 

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

+0

Вы все еще пытаетесь понять это? – AdamMc331

+0

Hi McAdam331 извините, я не ответил на это. я использовал ваш ответ, и моя проблема решена хорошо .. Большое спасибо другу – Devisy

ответ

2

Вы можете обернуть 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

Я был под впечатлением, что MySQL использовал 'ORDER BY', указанный последним выбором запроса UNION. Итак, если я не ошибаюсь, то, возможно, допрашивающий мог получить желаемые результаты, просто удалив все эти скобки. – Uueerdo

+0

@Uueerdo Возможно, вы правы. Мне просто казалось, что это происходит. Я попробую это без родителей и посмотрю. – AdamMc331

0

Это ваш запрос:

(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, если вы не хотите дополнительных накладных расходов на удаление дубликатов.

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