在 postgresql 中,如果两个数组具有共同成员,即它们重叠,则可以使用 && 运算符返回 t (true)。是否有一个函数/运算符会返回那些公共(public)成员的内容?
即像这样
select arrray_intersection(ARRAY[1, 4, 2], ARRAY[2, 3]);
ARRAY[2]
最佳答案
Since 8.4, there are useful builtins in Postgres这使得the function from the first answer更容易,可能更快(无论如何,这就是 EXPLAIN 告诉我的:“(cost=0.00..0.07 rows=1 width=64)”对于此查询与“(cost=0.00..60.02 rows=1 width=64)”对于原始的)。
简化的代码是:
SELECT ARRAY
(
SELECT UNNEST(a1)
INTERSECT
SELECT UNNEST(a2)
)
FROM (
SELECT array['two', 'four', 'six'] AS a1
, array['four', 'six', 'eight'] AS a2
) q;
是的,你可以把它变成一个函数:
CREATE FUNCTION array_intersect(anyarray, anyarray)
RETURNS anyarray
language sql
as $FUNCTION$
SELECT ARRAY(
SELECT UNNEST($1)
INTERSECT
SELECT UNNEST($2)
);
$FUNCTION$;
你可以称之为
SELECT array_intersect(array['two', 'four', 'six']
, array['four', 'six', 'eight']);
但您也可以将其称为内联:
SELECT array(select unnest(array['two', 'four', 'six']) intersect
select unnest(array['four', 'six', 'eight']));
关于sql - Postgres - 返回 2 个 ARRAY 的交集的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/756871/