順序を保持したい場所にこのクエリがあります
SELECT a FROM TABLE WHERE id in (2,45, 87, 10,12, 41, 29)
ここで、この順序で値が必要です。つまり、2の場合、45の場合、87の場合です。これをSQLで実行するにはどうすればよいですか。
順序を保持したい場所にこのクエリがあります
SELECT a FROM TABLE WHERE id in (2,45, 87, 10,12, 41, 29)
ここで、この順序で値が必要です。つまり、2の場合、45の場合、87の場合です。これをSQLで実行するにはどうすればよいですか。
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
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 でない場合、結果は希望どおりになります。