PostgreSQL中如何查询包含指定枚举值的数组字段?
如何查询PostgreSQL枚举数组中包含指定元素的行?
你当前的查询用=做精确数组匹配,只会返回genres完全等于['Adventure']的行,这就是为什么只有《Exiled Prince》被返回。要筛选出genres数组中包含'Adventure'的所有行,可以用以下两种常用方法:
方法1:使用ANY操作符
ANY操作符会检查目标数组中是否存在与指定值相等的元素,适合单个元素的匹配场景:
SELECT * FROM books WHERE 'Adventure'::book_genres_enum = ANY(genres);
注意需要将字符串'Adventure'显式转换为对应的枚举类型book_genres_enum,避免类型不匹配错误。
方法2:使用数组包含操作符@>
PostgreSQL的数组包含操作符@>可以判断左侧数组是否包含右侧的数组元素,如果你需要同时匹配多个元素,这种方法扩展性更强:
SELECT * FROM books WHERE genres @> ARRAY['Adventure']::book_genres_enum[];
这里右侧是仅包含'Adventure'的枚举数组,只要genres数组里存在这个元素,就会被匹配到。
内容的提问来源于stack exchange,提问作者Gashio Lee
相关产品推荐
相关产品推荐

