PostgreSQL クエリで IN を使用して順序付けられた結果を保証する
PostgreSQL の IN
演算子は効率的ですが、本質的に結果の順序を保証しません。 この記事では、IN
リスト内で指定された正確な順序で行を取得する方法を説明します。
標準の IN
句は、入力リストの配置に関係なく、予測できない順序で結果を返します。 順序を維持するための、シンプルかつ効果的な方法では、VALUES
コンストラクト (PostgreSQL 8.2 以降で利用可能) を利用します。
VALUES
では、各 IN
値を特定の順序に関連付けた一時テーブルを作成できます。 この一時テーブルはメイン テーブルと結合され、割り当てられたシーケンスに基づいて順序付けが可能になります。 クエリの例:
<code class="language-sql">SELECT c.* FROM comments c JOIN ( VALUES (1, 1), (3, 2), (2, 3), (4, 4) ) AS x (id, ordering) ON c.id = x.id ORDER BY x.ordering;</code>
このクエリは、x
を使用して一時テーブル VALUES
を構築し、各 id
を ordering
値にマッピングします。 comments
テーブル (c
) との結合により、VALUES
句で定義された順序に従って結果が返されることが保証されます。 最後の ORDER BY x.ordering
句は、目的の順次出力を保証します。
この手法は、一貫性のある予測可能な結果を保証します。IN
リスト内の要素の順序がアプリケーション ロジックにとって重要な場合に特に重要です。 このアプローチは、データベース クエリからの順序付けられた出力が必要な状況に強く推奨されます。
以上がPostgreSQL で IN を使用する場合、順序付けされた結果を保証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。