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

SQL中如何基于数组输入编写WHERE条件并返回对应结果数组

方案说明

1. WHERE条件编写

标准SQL场景下直接用IN运算符即可,把待查询的ID列表放在IN后的括号中:

WHERE id IN (1,4,7)

如果是传入数组参数的场景,不同数据库的适配写法略有区别:

  • PostgreSQL:用= ANY匹配数组元素:WHERE id = ANY('{1,4,7}'::int[])
  • MySQL:用FIND_IN_SET函数匹配:WHERE FIND_IN_SET(id, '1,4,7') > 0
  • SQL Server:用OPENJSON解析数组后匹配:WHERE id IN (SELECT value FROM OPENJSON('[1,4,7]'))

2. 实现返回与输入ID顺序对应的姓名数组

注意:直接用IN查询返回的结果顺序不一定和输入ID顺序一致,要保证一一对应,需要额外指定排序逻辑再聚合为数组,不同数据库的实现示例如下:

PostgreSQL示例

SELECT ARRAY_AGG(name ORDER BY array_position('{1,4,7}'::int[], id)) AS name_arr
FROM person
WHERE id = ANY('{1,4,7}'::int[]);

用array_position获取ID在输入数组中的位置,按该位置排序后用ARRAY_AGG聚合成数组,最终返回的数组顺序和输入ID完全对应。

MySQL示例

SELECT JSON_ARRAYAGG(name ORDER BY FIELD(id,1,4,7)) AS name_arr
FROM person
WHERE id IN (1,4,7);

用FIELD函数指定ID的排序规则,再用JSON_ARRAYAGG聚合为JSON数组格式。

SQL Server示例

-- SQL Server 2022及以上版本可用JSON_ARRAYAGG
SELECT JSON_ARRAYAGG(name ORDER BY CHARINDEX(','+CAST(id AS VARCHAR)+',', ',1,4,7,')) AS name_arr
FROM person
WHERE id IN (1,4,7);

补充说明:如果需要兼容ID匹配不到的场景、保留数组对应位置填充空值,可以把输入数组拆分为行后和人员表做左关联,再聚合就能保证返回数组长度和输入ID数组完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:45:03