0

結果を注文する方法はありますか(たとえば)

SELECT id,age, Location
FROM Student 
WHERE Location in ('NY','DC','MI','TE')

それらを持っている代わりに

id     age     Location
1       2       DC
2       2       NY
4       2       MI
6       2       TE

結果は、('NY'、'DC'、'MI'、'TE')の順序で並べ替える必要があります。

id     age     Location
2       2       NY
1       2       DC
4       2       MI
6       2       TE

一時テーブルを用意して、このテーブルに挿入することで可能だと思いました ('NY','DC','MI','TE')。次に、左結合を使用すると、必要に応じて順序付けられます。

より良い解決策はありますか?

お知らせ下さい。

4

3 に答える 3

3

MySQLでは、これは、を使用して実行できます。これFIND_IN_SETは、2番目の引数の最初の引数の出現のインデックスを返します。後者はコンマ区切りの値を含む文字列です。

同じことが可能になるはずだと思いますCHARINDEX-これを試してみてください:

SELECT id, age, location
FROM student 
WHERE location IN ('NY','DC','MI','TE')
ORDER BY CHARINDEX (location, 'NY,DC,MI,TE')
于 2013-03-25T15:54:23.073 に答える
-1

どのソリューションも、一時テーブルを使用するのとほぼ同じです。CTEまたはサブクエリを使用できますが、基本的に異なる構文を使用して同じ操作を実行しています。

于 2013-03-25T15:57:46.357 に答える
-1

テーブルから都市コードを選択する必要がないと仮定して、次のいくつかを試してください。

ORDER BY FIELD(Location,'NY','DC','MI','TE')
ORDER BY FIND_IN_SET(Location,'NY,DC,MI,TE')
ORDER BY LOCATE(CONCAT(',',Location,','),',NY,DC,MI,TE,')
ORDER BY Location IN ('NY','DC','MI','TE')

INサブクエリを受け入れることもできます(ORDER BY Location IN SELECT city_code FROM ...

于 2013-03-25T16:03:42.600 に答える