在 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中文網其他相關文章!