3 回答
TA贡献1851条经验 获得超3个赞
使用ANY构造更简单:
SELECT value_variable = ANY ('{1,2,3}'::int[])
的右操作数ANY(括号之间)可以是一个组(子查询的结果,例如) 或一个阵列。有几种使用方法:
SQLAlchemy:如何筛选PgArray列类型?
重要区别:数组运算符(<@,@>等)将数组类型期望为操作数,并在PostgreSQL的标准发行版中支持GIN或GiST索引,而该ANY构造将元素类型期望为左操作数,并且不支持这些索引。例:
用于在JSON数组中查找元素的索引
这些都不适合NULL元素。测试NULL:
检查Postgres数组中是否存在NULL
TA贡献1797条经验 获得超6个赞
当心我陷入的陷阱:当检查数组中是否不存在某些值时,您不应该这样做:
SELECT value_variable != ANY('{1,2,3}'::int[])
但是使用
SELECT value_variable != ALL('{1,2,3}'::int[])
代替。
TA贡献1810条经验 获得超4个赞
但是,如果您还有其他方法可以分享,请与我们分享。
您可以比较两个数组。如果左侧数组中的任何值与右侧数组中的值重叠,则它将返回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
添加回答
举报