2017-02-25 9 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文でカラムの相対位置を使用する場合、それは動作しません。

ifの列の相対位置は、ORDER 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

** 'HTML' **スニペットに**' SQL' **を入れても実行されません。私はあなたのためにそれを修正します。 –

+0

問題をよりよく理解するために、入力と期待される出力を追加してください。 – Sangharsh

+0

レコードがunionの最初のクエリから発生したときにソートするために列 't'を使い、2番目のクエリからレコードが来たときに' o'を使いますか? – collapsar

答えて

1

あなたの本当の混乱はわかりません。 order byに整数が現れると、これは列番号として扱われます。他の整数の使用は式として解釈されます。

カラム番号の使用がSQL標準から削除されました。したがって、特定のデータベースでの使用は、将来のリリースでは保証されません。実際には列名を使用する方が良いです。

+0

ありがとう、私は "if(1,1,0)" = "1"のため、 "order by by(1,1,0)"の順序は "order by 1"と同じであると混乱します。 –

+0

あなたは "(1,1,0)=" order by "と" order by 1 "=" order by "という意味ですか? @Linoff –

+0

@LanlanWang。 。 。はい、それはまさに私が意味するものです。 –

0

私は私が正しいんだ場合、あなたはこのようなものを使用することができ、あなたが2列以上の基準に基づいてクエリをソートしたいと思う:

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

注:ドンとき代わりunionunion allを使用する」をパフォーマンスの問題として重複した値を削除したくない;)

関連する問題