Answers:
ANY
构造更简单:
SELECT value_variable = ANY ('{1,2,3}'::int[])
ANY
(在括号之间)的右操作数可以是集合(例如,子查询的结果)或数组。有几种使用方法:
重要的区别:(数组运算符<@
,@>
,&&
。等人)中期望阵列类型作为操作数和支撑GIN或GiST索引中的PostgreSQL标准分布,而ANY
构建体预期的元件为左操作数,并且不支持这些索引类型。例:
这些都不适合NULL
元素。测试NULL
:
ANY/ALL (array) requires array on right side
,添加::int[]
了魅力。
'something' = ANY(some_array)
也可以在WHERE
子句中使用。由于仅Crom知道的原因,最近四年来我一直在考虑不能在WHERE
子句中使用数组比较器。那些日子已经过去了。(我小时候掉在头上,所以也许就是我)。
boolean
表达式均可在WHERE
子句中使用-Crom愿意。
但是如果您还有其他方法可以分享,请与我们分享。
您可以比较两个数组。如果左侧数组中的任何值与右侧数组中的值重叠,则它将返回true。这有点骇人听闻,但确实有效。
SELECT '{1}' && '{1,2,3}'::int[]; -- true
SELECT '{1,4}' && '{1,2,3}'::int[]; -- true
SELECT '{4}' && '{1,2,3}'::int[]; -- false
1
在正确的数组中true
,即使该值4
未包含在正确的数组中4
)中没有值在右数组中,因此它返回false
当寻找数组中元素的存在时,需要适当的转换才能传递postgres的SQL解析器。这是一个在join子句中使用数组包含运算符的示例查询:
为简单起见,我只列出相关部分:
table1 other_name text[]; -- is an array of text
显示的SQL的连接部分
from table1 t1 join table2 t2 on t1.other_name::text[] @> ARRAY[t2.panel::text]
以下也适用
on t2.panel = ANY(t1.other_name)
我只是在猜测是否需要额外的转换,因为解析不必获取表定义来确定列的确切类型。其他人请对此发表评论。
嗨,一个对我来说很好,也许对某人有用
从your_table中选择*,其中array_column :: text类似于ANY(ARRAY ['%text_to_search%':: text]);