我有一张桌子
books
,其行如下:
类型字段是一个枚举数组,其中包含书籍类型,这些是其可能的值:
['adventure', 'horror', 'romance']
标题 | 流派 |
---|---|
死锁 | {恐怖} |
阳光山 | {浪漫、冒险} |
流亡王子 | {冒险} |
我尝试过:
SELECT * FROM books
WHERE genres = ARRAY['Adventure']::book_genres_enum[];
但这只会返回“流亡王子”书。
如何为其 genres
数组中
包含“冒险”的所有行制定查询?
简单的查询是用
= ANY
:
SELECT * FROM books
WHERE 'Adventure'::book_genres_enum = ANY(genres)
这适用于任何类型的数组。在这方面,
enum
类型没有什么特别的。
显式转换是可选的。当将“Adventure”作为无类型字符串文字传递时,数据类型源自上下文。 (不适用于键入的值。)
如果表很大并且您在
books(genres)
上有 GIN 索引,请改用数组运算符 - 查询是等效的:
SELECT * FROM books
WHERE genres @> '{Adventure}'::book_genres_enum[];
为什么?