使用 IN 子句控制 PostgreSQL 查询中的行顺序
PostgreSQL 的 IN
子句虽然过滤功能强大,但本质上并不能保证特定的行顺序。 如果您需要检索根据 IN
列表中的顺序排序的行,使用 VALUES
构造(在 PostgreSQL 8.2 及更高版本中可用)的解决方法提供了一个解决方案。
此方法创建一个子查询,将 IN
列表中的 ID 映射到自定义订单。然后主查询连接该子查询以对结果进行排序。 方法如下:
<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
)。 x
中的每一行将 IN
列表中的 ID 与其所需的顺序 (ordering
) 配对。 JOIN
操作根据 comments
列将此临时表链接到 id
表。 最后,ORDER BY x.ordering
根据 VALUES
构造中定义的顺序对结果进行排序。
此方法有效地允许您自定义涉及 IN
子句的查询返回的行顺序,从而提供对数据呈现的精确控制。
以上是如何根据 IN 子句中值的顺序对 PostgreSQL 结果进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!