首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在postgres中比较两个数组并只挑选不匹配的元素

如何在postgres中比较两个数组并只挑选不匹配的元素
EN

Stack Overflow用户
提问于 2011-06-30 17:56:44
回答 7查看 22K关注 0票数 40

如何才能只挑选两个数组之间不匹配的元素。

示例:

代码语言:javascript
复制
base_array [12,3,5,7,8]
temp_array [3,7,8]

所以这里我想要比较这两个数组,并从基数组中删除匹配的元素。

现在,base_array应该像[12,5]一样

EN

回答 7

Stack Overflow用户

发布于 2011-06-30 20:55:55

我会用数组操作符来处理这个问题。

代码语言:javascript
复制
select array(select unnest(:arr1) except select unnest(:arr2));

如果:arr1和:arr2不相交,使用array_agg()会导致null。

票数 47
EN

Stack Overflow用户

发布于 2011-06-30 18:21:09

代码语言:javascript
复制
select array_agg(elements)
from (
  select unnest(array[12,3,5,7,8])
  except
  select unnest(array[3,7,8])
) t (elements)
票数 31
EN

Stack Overflow用户

发布于 2013-09-17 00:08:34

我构造了一组函数来专门处理这些类型的问题:https://github.com/JDBurnZ/anyarray

最棒的是,这些函数适用于所有数据类型,而不只是整数,因为intarray是受限制的。

从GitHub加载这些SQL文件中定义的函数后,您需要做的就是:

代码语言:javascript
复制
SELECT
  ANYARRAY_DIFF(
    ARRAY[12, 3, 5, 7, 8],
    ARRAY[3, 7, 8]
  )

返回类似于:ARRAY[12, 5]的内容

如果您还需要返回排序后的值:

代码语言:javascript
复制
SELECT
  ANYARRAY_SORT(
    ANYARRAY_DIFF(
      ARRAY[12, 3, 5, 7, 8],
      ARRAY[3, 7, 8]
    )
  )

准确返回:ARRAY[5, 12]

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6533029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档