检查Postgres数组中是否存在值

我需要一种方法来测试给定数组中是否存在值。到目前为止,我想到了这样的东西


select '{1,2,3}'::int[] @> (ARRAY[]::int[] || value_variable::int)

但我一直认为应该有一个更简单的方法,我只是看不到它。


编辑:刚意识到我可以做到这一点


select '{1,2,3}'::int[] @> ARRAY[value_variable::int]

这要好得多,我相信就足够了,但是如果您有其他方法可以做到,请分享。


千万里不及你
浏览 2878回答 3
3回答

皈依舞

使用ANY构造更简单:SELECT value_variable = ANY ('{1,2,3}'::int[])的右操作数ANY(括号之间)可以是一个组(子查询的结果,例如) 或一个阵列。有几种使用方法:SQLAlchemy:如何筛选PgArray列类型?重要区别:数组运算符(<@,@>等)将数组类型期望为操作数,并在PostgreSQL的标准发行版中支持GIN或GiST索引,而该ANY构造将元素类型期望为左操作数,并且不支持这些索引。例:用于在JSON数组中查找元素的索引这些都不适合NULL元素。测试NULL:检查Postgres数组中是否存在NULL

FFIVE

当心我陷入的陷阱:当检查数组中是否不存在某些值时,您不应该这样做:SELECT value_variable != ANY('{1,2,3}'::int[])但是使用SELECT value_variable != ALL('{1,2,3}'::int[])代替。

慕莱坞森

但是,如果您还有其他方法可以分享,请与我们分享。您可以比较两个数组。如果左侧数组中的任何值与右侧数组中的值重叠,则它将返回true。这有点骇人听闻,但确实有效。SELECT '{1}'&nbsp; &nbsp;&& '{1,2,3}'::int[];&nbsp; -- trueSELECT '{1,4}' && '{1,2,3}'::int[];&nbsp; -- trueSELECT '{4}'&nbsp; &nbsp;&& '{1,2,3}'::int[];&nbsp; -- false在第一个和第二个查询中,值1在正确的数组中请注意,第二个查询是true,即使该值4未包含在正确的数组中对于第三个查询,左数组(即4)中没有值在右数组中,因此它返回false
打开App,查看更多内容
随时随地看视频慕课网APP