如何在Athena预准备语句的IN子句中传入多个值
Athena预准备语句中IN子句的多值参数处理方案
问题原因
你之前的尝试失败有两个核心原因:
- 直接传入多个独立值会被识别为对应多个占位符,和原语句的2个占位符不匹配;
- 用
array_join将数组转成字符串后,IN子句实际是在匹配'NY, CA'这个单一字符串,而非两个独立的城市值,自然查不到结果。
正确解决方案
方案1:使用IN UNNEST(?)
定义预准备语句:
PREPARE ps AS SELECT locationId, location FROM location_type WHERE city IN UNNEST(?) AND userId = ?
执行语句:
EXECUTE ps using ARRAY['NY', 'CA'], '12345';
UNNEST会把传入的数组拆分成独立的行,让IN子句能正确匹配多个城市值。
方案2:使用array_contains
定义预准备语句:
PREPARE ps AS SELECT locationId, location FROM location_type WHERE array_contains(?, city) AND userId = ?
执行语句:
EXECUTE ps using ARRAY['NY', 'CA'], '12345';
array_contains会检查city值是否存在于传入的数组中,实现和IN子句相同的筛选效果。
内容的提问来源于stack exchange,提问作者triples13
相关产品推荐
相关产品推荐

