2011-01-14 51 views
2

私はSQLステートメントを持っています。SQLのSELECT文

結果を返すと、常にaaa、bbb、ccc、dddのようなIDでソートされます。 しかし、私はそれらをbbb、aaa、ddd、cccのように入力したのと同じ順番にしておきたい。

解決方法を教えてもらえますか?

答えて

7

ORDER BYで質問しない限り、検索順序は指定されていません。入力した順序を保持したい場合は、プログレッシブROW_NUMBER列を追加して、並べ替えを依頼してください。このクエリは、あなたが望むものを達成する可能性があるという事実にもかかわらず

+0

特定のデータベースには、依存してはいけないが、それでもなお存在するデフォルトの順序があります。例えば、MySQL InnoDBテーブルは、デフォルトで 'PRIMARY KEY'を昇順に並べた結果を返します。 – dkarp

4
select * from users where username='bbb' 
UNION 
select * from users where username='aaa' 
UNION 
select * from users where username='ddd' 
UNION 
select * from users where username='ccc' 

、ユーザー6502が述べたように、順序はこのクエリではまだ特定されていないので、あなたが安全に別の間でのような返されることに依存することはできません実装。別の注意点として

、あなたの奇妙なソート順序は重要ではなかった場合、あなただけのIN句WHERE使用する必要があります:あなたは、ユーザーの表の「ID」欄を(持っている場合

select * from users where username in ('aaa', 'bbb', 'ccc', 'ddd', 'ccc') 
+0

lolちょうどあなたが*できることを意味するわけではありません:D –

+0

はい、私はそれが不思議な倒錯であることに同意します。 –

+0

「テキストデータ型は比較できないため、DISTINCTとして選択できません」というメッセージが表示されます。私がユニオン – hhh3112

1

をDDD「の最大のID」を有する)で、あなたはこのような何かを行うことができます。

select * from users where username in ('aaa','bbb','ccc','ddd') 
order by id; 

はETA:id列が別のテーブルにある場合は、正しいIDを取得するために結合を実行する必要があります。