如何让MySQL查询结果按IN条件指定的ID顺序返回?
按IN条件指定的ID顺序返回查询结果
要让查询结果按照IN子句中给定的ID顺序返回,不同数据库可采用以下针对性方案:
MySQL/MariaDB 实现方式
利用FIELD()函数获取ID在指定列表中的位置,以此作为排序依据:
SELECT * FROM `rsoft_module_fields` WHERE id IN (3,7,1,5) ORDER BY FIELD(id, 3,7,1,5);
PostgreSQL 实现方式
可以使用array_position()函数匹配数组中ID的位置:
SELECT * FROM rsoft_module_fields WHERE id = ANY(ARRAY[3,7,1,5]) ORDER BY array_position(ARRAY[3,7,1,5], id);
也可通过CASE WHEN手动映射排序优先级:
SELECT * FROM rsoft_module_fields WHERE id IN (3,7,1,5) ORDER BY CASE id WHEN 3 THEN 1 WHEN 7 THEN 2 WHEN 1 THEN 3 WHEN 5 THEN 4 END;
SQL Server 实现方式
CASE WHEN 映射写法
SELECT * FROM rsoft_module_fields WHERE id IN (3,7,1,5) ORDER BY CASE id WHEN 3 THEN 1 WHEN 7 THEN 2 WHEN 1 THEN 3 WHEN 5 THEN 4 END;
CHARINDEX 匹配写法
SELECT * FROM rsoft_module_fields WHERE id IN (3,7,1,5) ORDER BY CHARINDEX(',' + CAST(id AS VARCHAR) + ',', ',3,7,1,5,');
通用跨库方案
如果需要适配多种数据库,CASE WHEN的手动映射方式是最稳妥的选择,无数据库函数依赖,逻辑清晰易懂。
内容的提问来源于stack exchange,提问作者Pandiyan
相关产品推荐
相关产品推荐

