PostgreSQL中两个数组的联合,没有取消

MrG*_*ass 9 arrays postgresql union plpgsql

我在PostgreSQL中有两个我需要联合的数组.例如:

{1,2,3}工会{1,4,5}会回来{1,2,3,4,5}

使用连接(||)运算符不会删除重复的条目,即它返回 {1,2,3,1,4,5}

我在网上找到了一个解决方案,但我不喜欢它需要如何取消两个数组: select ARRAY(select unnest(ARRAY[1,2,3]) as a UNION select unnest(ARRAY[2,3,4,5]) as a)

是否有一个运算符或内置函数可以干净地结合两个数组?

Clo*_*eto 18

如果您的问题是不需要两次,则只需要一次

select array_agg(a order by a)
from (
    select distinct unnest(array[1,2,3] || array[2,3,4,5]) as a
) s;
Run Code Online (Sandbox Code Playgroud)

  • 作为函数```CREATE OR REPLACE FUNCTION mergeArrays(a1 ANYARRAY,a2 ANYARRAY)以$ SELECT ARRAY_AGG(x OR BY BY x)FROM(SELECT DISTINCT UNNEST($ 1 || $ 2)AS x)s返回ANYARRAY作为$$ $$ LANGUAGE SQL STRICT;``` (2认同)

Pav*_*ule 10

有一个扩展intarray(在contrib包中)包含一些有用的函数和运算符:

postgres=# create extension intarray ;
CREATE EXTENSION
Run Code Online (Sandbox Code Playgroud)

单管操作员:

postgres=# select array[1,2,3] | array[3,4,5];
  ?column?   
?????????????
 {1,2,3,4,5}
(1 row)
Run Code Online (Sandbox Code Playgroud)

uniq功能:

postgres=# select uniq(ARRAY[1,2,3] || ARRAY[3,4,5]);
    uniq     
?????????????
 {1,2,3,4,5}
(1 row)
Run Code Online (Sandbox Code Playgroud)

ANSI/SQL知道一个多集,但PostgreSQL还不支持它.