You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Redshift查询结果与IN子句中的ID顺序一致?

让查询结果与IN子句顺序一致的方法

默认情况下,SQL的SELECT语句返回的结果是无序的,除非显式指定ORDER BY子句。要让结果和IN子句中的id顺序保持一致,需要通过ORDER BY结合对应数据库的函数或语法实现,以下是主流数据库的实现方式:

MySQL/MariaDB

使用FIELD()函数,该函数会返回目标值在参数列表中的位置,以此作为排序依据:

SELECT * FROM table WHERE id IN (3,1,2,4) ORDER BY FIELD(id, 3,1,2,4);

PostgreSQL

方法1(9.5+版本推荐)

使用array_position()函数,配合数组来指定顺序:

SELECT * FROM table WHERE id = ANY(ARRAY[3,1,2,4]) ORDER BY array_position(ARRAY[3,1,2,4], id);

方法2(兼容旧版本)

通过字符串拼接+POSITION()函数实现:

SELECT * FROM table WHERE id IN (3,1,2,4) ORDER BY POSITION(','||id||',' IN ',3,1,2,4,');

SQL Server

方法1(通用兼容所有版本)

用CASE语句为每个id指定排序优先级:

SELECT * FROM table WHERE id IN (3,1,2,4)
ORDER BY CASE id
  WHEN 3 THEN 1
  WHEN 1 THEN 2
  WHEN 2 THEN 3
  WHEN 4 THEN 4
END;

方法2(2022+版本支持)

借助STRING_SPLIT()的ordinal列(保留分割后的顺序):

SELECT t.*
FROM table t
JOIN STRING_SPLIT('3,1,2,4', ',', 1) s ON t.id = CAST(s.value AS INT)
ORDER BY s.ordinal;

注意事项

如果IN子句中的元素数量较多,上述直接写函数或CASE的方式会比较繁琐,可以考虑创建临时表/表变量,存储带排序序号的id列表,再通过关联查询实现排序。

内容的提问来源于stack exchange,提问作者Rostricalv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:57:07