2

順序を保持したい場所にこのクエリがあります

SELECT a FROM TABLE WHERE id in (2,45, 87, 10,12, 41, 29)

ここで、この順序で値が必要です。つまり、2の場合、45の場合、87の場合です。これをSQLで実行するにはどうすればよいですか。

4

2 に答える 2

5

MySQL では ORDER BY FIELDを使用できます。

SELECT a
FROM yourtable
WHERE id IN (2, 45, 87, 10, 12, 41, 29)
ORDER BY FIELD (id, 2, 45, 87, 10, 12, 41, 29)

FIELD をサポートしていないデータベースでは、代わりに CASE 式を使用できます。

SELECT a
FROM yourtable
WHERE id IN (2, 45, 87, 10, 12, 41, 29)
ORDER BY CASE
    WHEN id = 2 THEN 1
    WHEN id = 45 THEN 2
    WHEN id = 87 THEN 3
    WHEN id = 10 THEN 4
    WHEN id = 12 THEN 5
    WHEN id = 41 THEN 6
    WHEN id = 29 THEN 7
END
于 2012-04-22T07:36:26.217 に答える
0

ID 値が別のクエリから取得され、その順序が重要な場合、そのクエリには、ID を正しい順序で生成する独自の ORDER BY 句が必要です。次に、この ORDER BY 句を使用して、IN 句の代わりに結合を使用できます。これを行うための標準的な SQL クエリを次に示します。

with SelectIDs(id,position) as (
  select 
    id,
    row_number() over (
      order by columnA, columnB
    )
  from table2
  where <your where condition>
)
  select T.*
  from yourTable as T
  join SelectIDs as I
  on I.id = T.id
  order by I.position;

一致する ID が明確で NULL でない場合、結果は希望どおりになります。

于 2012-04-23T00:54:47.007 に答える