2015-05-26 55 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

嗨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使用了最後選擇UNION查詢指定的'ORDER BY'。所以,如果我沒有弄錯,提問者可能會通過刪除所有括號來獲得他們想要的結果。 – 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,除非你想刪除重複的額外開銷。