我需要一种方法来测试一个值是否存在于给定的数组中。到目前为止,我想到了这样的东西
select '{1,2,3}'::int[] @> (ARRAY[]::int[] || value_variable::int)
但我一直认为应该有一个更简单的方法,这一点,我只是看不到它。
编辑:只是意识到我可以做到这一点
select '{1,3}'::int[] @> ARRAY[value_variable::int]
这是更好的,我相信足够了,但如果你有其他的方式做到这一点,请分享。
更简单的
ANY
construct:
SELECT value_variable = ANY ('{1,3}'::int[])
ANY的右操作数(括号之间)可以是set (result of a subquery,for instance)或array.有几种使用方式:
> SQLAlchemy: how to filter on PgArray column types?
重要区别:Array operators (<@
,@>
et al.)期望数组类型作为操作数和support GIN or GiST indices在Postgresql的标准分布,而ANY构造期望元素类型作为左操作数,并且不支持这些索引。例:
> Index for finding an element in a JSON array
这些都不适用于NULL元素。要测试NULL: