PostgreSQL では、このクエリを実行します
SELECT "table".* FROM "table" WHERE "table"."column" IN (1, 5, 3)
常に結果を1, 5, 3
順番に返しますか、それともあいまいですか?
あいまいな場合、結果が順序どおりであることを適切に保証するにはどうすればよい1, 5, 3
ですか?
PostgreSQL では、このクエリを実行します
SELECT "table".* FROM "table" WHERE "table"."column" IN (1, 5, 3)
常に結果を1, 5, 3
順番に返しますか、それともあいまいですか?
あいまいな場合、結果が順序どおりであることを適切に保証するにはどうすればよい1, 5, 3
ですか?
WHERE 句は結果を順序付けしません。一致するレコードを、データベース インデックスが見つけた順序で選択するだけです。
order by 句を追加する必要があります。
真の前の偽の注文
SELECT "table".*
FROM "table"
WHERE "table"."column" IN (1, 5, 3)
order by
"column" != 1,
"column" != 5,
"column" != 3
selectステートメントに次のようなものを追加します
order by CASE WHEN "column"=1 THEN 1
WHEN "column"=2 THEN 2
ELSE 3
END
3 つ以上の値がある場合は、ルックアップ テーブルを作成し、クエリでそれに結合する方が簡単な場合があります。
セット自体は順序を知りません。SELECT
クエリは、順序付けされた行を返す必要がありORDER BY
ます。
他の回答では、 のCASE
ステートメントまたはブール式が提案されていますORDER BY
が、それはエレガントとはほど遠いものであり、大きなテーブルではかなり非効率的です。クエリのセットではなく、配列またはカンマ区切りの文字列を使用することをお勧めします。
特定のテーブルの場合:
CREATE TABLE tbl (col int);
配列を使用すると、次のように機能します。
SELECT col
FROM tbl
JOIN (
SELECT col, row_number() OVER () AS rn
FROM unnest('{1,5,3}'::int[]) AS col
) u USING (col)
ORDER BY rn;
入力配列のシーケンスで見つかったすべての行を返します。
詳細と将来性のあるコードについては、この密接に関連する質問を検討してください:
PostgreSQL unnest() with element number
または、dba.SE に関する対応する質問: ネスト
されていない配列内の要素の元の順序を保持する方法は?