IN句の順序でmysql行を選択する方法

mysql sql sql-order-by
IN句の順序でmysql行を選択する方法

たとえば、表EMPLOYEEにあります。

(code, name)
(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )

行う場合:(EMPLOYEEから*を選択)以下が得られます:

(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )

実行する場合:((1,3,2,4)のコードのEMPLOYEEから*を選択すると、次のようになります)

(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )

IN句のCSV値の順にそれを取得するにはどうすればよいですか?

(1, 'Jimmy')
(3, 'Michelle')
(2, 'Albert')
(4, 'Felix' )

  9  5


ベストアンサー

FIND_IN_SET functionを使用します。

SELECT e.*
  FROM EMPLOYEE e
 WHERE e.code in (1,3,2,4)
ORDER BY FIND_IN_SET(e.code, '1,3,2,4')

または、CASEステートメントを使用します。

SELECT e.*
  FROM EMPLOYEE e
 WHERE e.code in (1,3,2,4)
ORDER BY CASE e.code
           WHEN 1 THEN 1
           WHEN 3 THEN 2
           WHEN 2 THEN 3
           WHEN 4 THEN 4
         END

18


入力(CSV)ファイルに基づく順序を保持するこの問題の一般的な解決策は、テーブルに「AUTO_INCREMENT」列を追加し、それに基づいた順序にすることです。 おそらくクエリの一部としてそれを表示することはありませんが、インポート後に入力ファイルで元の順序を取得するためにそれを注文することができます。

1


タイトルとURLをコピーしました