如何查询STRING ARRAY列包含另一STRING ARRAY任意元素的所有行?
数组列匹配任意元素的最简实现方案
你需要的是判断两个数组是否存在重叠元素(即至少有一个共同元素),PostgreSQL 原生提供了专门的数组重叠运算符&&,可以直接满足需求,无需拼接多个OR条件。
正确查询写法
SELECT * FROM a WHERE b && ARRAY['dog', 'tiger'];
执行结果说明
针对你提供的测试数据,上述语句会返回以下2行符合要求的结果:
b ------------------------- {elephant,hippo,tiger} {bear,dog,cat}
原写法问题说明
你尝试的b @> ANY(ARRAY['dog', 'tiger'])执行报错是因为类型不匹配:
@>运算符要求左右两侧均为数组类型,语义是「左侧数组完整包含右侧数组」- 后面
ANY返回的元素是字符串类型('dog'、'tiger'),和运算符要求的数组类型不匹配
如果一定要用ANY写法,需要把右侧参数转为二维数组,写法如下,远不如&&简洁:
SELECT * FROM a WHERE b @> ANY(ARRAY[ARRAY['dog'], ARRAY['tiger']]);
内容的提问来源于stack exchange,提问作者Nikolay Maslarski
相关产品推荐
相关产品推荐

