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