数组列无法使用WHERE条件查询的技术求助
解决PostgreSQL数组列的WHERE条件查询问题
嘿,我懂你不想折腾复杂的unnest的心情!其实PostgreSQL针对数组列提供了非常简洁的查询方式,完全不用拆解数组就能实现你要的需求。
首先说下你遇到的错误:你写的where box_number is {123}语法是不对的,PostgreSQL里数组的正确写法要么是ARRAY[123],要么是带单引号的数组字面量'{123}',但更关键的是,判断数组是否包含某个元素根本不需要用is操作符,用下面两种简单方法就行:
方法1:使用数组包含操作符 @>
这是最直观的数组查询方式,直接检查数组列是否包含指定元素:
SELECT * FROM BOX_TABLE WHERE box_number @> ARRAY[123];
@>操作符的作用是判断左边的数组是否包含右边的数组(这里右边是只含123的单元素数组),完美匹配你要找“box_number里有123”的需求。
方法2:使用ANY操作符
如果你觉得上面的写法有点绕,也可以用ANY来直接判断元素是否存在于数组中:
SELECT * FROM BOX_TABLE WHERE 123 = ANY(box_number);
这个语法的意思是“123是否等于box_number数组中的任意一个元素”,结果和方法1完全一致,同样简洁。
额外提一句:如果你的box_number列数据量比较大,建议给它建个GIN索引,这样@>操作符还能利用索引大幅提升查询速度,索引创建语句是:
CREATE INDEX idx_box_number ON BOX_TABLE USING GIN (box_number);
内容的提问来源于stack exchange,提问作者Hamza Khalid
相关产品推荐
相关产品推荐

