gpt4 book ai didi

sql - Postgres - 返回 2 个 ARRAY 的交集的函数?

转载 作者:行者123 更新时间:2023-11-29 11:07:08 46 4
gpt4 key购买 nike

在 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/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com