2017-02-25 60 views
0

我在MySQL運行像下面的SQL查詢:如何在if語句中按順序使用列相對位置?

select * 
from (
    select 2 as o,1 as t from dual 
    union 
    select 1 as o,2 as t from dual 
    ) x 
order by if((select 1),o,t); 

它運作良好,但是當我使用if聲明中列的相對位置,這是行不通的。

如何使用ifORDER BY語句中的列相對位置?

select * 
from (
    select 2 as o,1 as t from dual 
    union 
    select 1 as o,2 as t from dual 
    ) x 
order by if((select 0),1,2); 
+0

將**'SQL' **放入**'HTML' **代碼片段中將不會運行它。我會爲你糾正它。 –

+0

您可以添加輸入和預期輸出以幫助更好地理解問題嗎? – Sangharsh

+0

當記錄來自聯合的第一個查詢時,是否希望使用列「t」進行排序,而當它來自第二個查詢時,是否使用「o」? – collapsar

回答

1

我不確定你真正的困惑是什麼。當整數出現在order by中時,則將其視爲列號。任何其他使用整數都被解釋爲一個表達式。

使用列號已從SQL標準中刪除。因此,它在未來版本中不保證它在任何特定數據庫中的使用。使用列名真的更好。

+0

謝謝,我混淆了「由於if(1,1,0)」=「1」,if(1,1,0)的順序應該等於「order by 1」。 –

+0

您的意思是,「if(1,1,0)」=「order by 」和「order by 1」=「order by 」的順序是嗎? @Linoff –

+0

@蘭蘭王。 。 。是的,那正是我的意思。 –

0

我想你想基於一個標準超過兩列查詢進行排序,如果我是正確的,你可以使用這樣的事情:

... 
order by 
    case when (your criteria) 
     then column1 
     else column2 
    end; 

注:使用union all代替union當你不不想刪除重複值作爲性能問題;)。