如何在PostgreSQL中调整数组以适配IN运算符?
在PostgreSQL中用数组匹配条件的正确方式
你不需要把数组转成带单引号的字符串列表,PostgreSQL有更直接的方式处理数组匹配:
方法1:使用ANY运算符(推荐)
ANY运算符专门用于检查字段是否匹配数组中的任意元素,语法简洁且性能友好:
SELECT * FROM table WHERE something = ANY ('{"val1","val2"}'::text[]);
这个语句的效果和SELECT * FROM table WHERE something IN ('val1','val2');完全一致。
方法2:用unnest()拆分数组
如果一定要用IN运算符,可以通过unnest()把数组拆分成单行的结果集,再作为子查询传入:
SELECT * FROM table WHERE something IN (SELECT unnest('{"val1","val2"}'::text[]));
unnest()会将数组{"val1","val2"}转换成包含两行数据(val1和val2)的临时结果集,IN就能正确匹配每个值。
为什么array_to_string()不行?
你之前用array_to_string()得到的是'val1,val2'这个单个字符串,IN会把它当作一个完整的匹配值,而不是拆分成val1和val2两个独立值,所以无法达到预期效果。
内容的提问来源于stack exchange,提问作者AnQuqu
相关产品推荐
相关产品推荐

