排除匹配的数组元素

Dmi*_*try 5 sql arrays postgresql

如何从另一个数组中排除一个数组的匹配元素?

邮政编码:

a1 := '{1, 2, 5, 15}'::int[];
a2 := '{1, 2, 3, 6, 7, 9, 15}'::int[];

a3 := a2 ??magic_operator?? a1;
Run Code Online (Sandbox Code Playgroud)

a3我期望正好是 '{3, 6, 7, 9}'

最后结果

我和 lad2025 解决方案工作正常。

array_position()需要PostgreSQL 9.5及更高版本的解决方案,执行 x3 更快。

Erw*_*ter 2

附加模块为整数数组intarray提供了一个简单快速的减法运算符-,这正是您正在寻找的magic_operator :

test=# SELECT '{1, 2, 3, 6, 7, 9, 15}'::int[] - '{1, 2, 5, 15}'::int[] AS result;
 ?column?
-----------
 {3,6,7,9}
Run Code Online (Sandbox Code Playgroud)

您需要为每个数据库安装一次模块:

CREATE EXTENSION intarray;
Run Code Online (Sandbox Code Playgroud)

它还为索引提供了特殊的运算符类:

请注意,它仅适用于:

...无空整数数组。