PostgreSQL中是否有一个运算符来测试一个元素是否在一个数组中?
目前,我正在以一种稍微复杂的方式进行此类测试,首先为元素构造一个单例数组,然后在数组之间使用<@
运算符。
SELECT ARRAY[1] <@ ARRAY[1,2,3];
(SELECT 1 <@ ARRAY[1,2,3];
不起作用)。
有没有更简洁/清晰的方法?
PostgreSQL中是否有一个运算符来测试一个元素是否在一个数组中?
目前,我正在以一种稍微复杂的方式进行此类测试,首先为元素构造一个单例数组,然后在数组之间使用<@
运算符。
SELECT ARRAY[1] <@ ARRAY[1,2,3];
(SELECT 1 <@ ARRAY[1,2,3];
不起作用)。
有没有更简洁/清晰的方法?
假设要检查的元素never
NULL
,您的原始方法在存在数组列匹配索引的情况下提供卓越的性能(在您的示例中)。看:
int[]
如果全部与
integer
阵列有关,请考虑使用附加模块intarray
以获得卓越的性能。如果您的列实际上是表达式中的数组元素
integer
(在您的示例中很简单),请考虑:OTOH,如果
NULL
值可以包含在表达式的任一侧并且您不想NULL
输入,而是像任何其他元素一样NULL
对待,然后像这样使用(Postgres 9.5 或更高版本):NULL
array_position()
有关的:
对于没有索引支持和不涉及值的测试(或者如果您对输入
NULL
感到满意)并且性能并不重要,请使用Vérace 演示的通用构造。NULL
NULL
ANY
你需要使用
ANY
构造!为了回答你的问题,我做了以下事情:
创建了一个表:
添加了几个示例记录:
运行我的查询:
小提琴在这里可用。我希望这能回答您的问题 - 如果没有,请告诉我!