如何匹配枚举值数组中的元素?

问题描述 投票:0回答:1

我有一张桌子

books
,其行如下:

类型字段是一个枚举数组,其中包含书籍类型,这些是其可能的值:

['adventure', 'horror', 'romance']

标题 流派
死锁 {恐怖}
阳光山 {浪漫、冒险}
流亡王子 {冒险}

我尝试过:

SELECT * FROM books
WHERE genres = ARRAY['Adventure']::book_genres_enum[];

但这只会返回“流亡王子”书。
如何为其 genres 数组中

包含
“冒险”的所有行制定查询?

sql arrays postgresql enums
1个回答
2
投票

简单的查询是用

= 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[];

为什么?

© www.soinside.com 2019 - 2024. All rights reserved.