如何才能只挑选两个数组之间不匹配的元素。
示例:
base_array [12,3,5,7,8]
temp_array [3,7,8]所以这里我想要比较这两个数组,并从基数组中删除匹配的元素。
现在,base_array应该像[12,5]一样
发布于 2011-06-30 20:55:55
我会用数组操作符来处理这个问题。
select array(select unnest(:arr1) except select unnest(:arr2));如果:arr1和:arr2不相交,使用array_agg()会导致null。
发布于 2011-06-30 18:21:09
select array_agg(elements)
from (
select unnest(array[12,3,5,7,8])
except
select unnest(array[3,7,8])
) t (elements)发布于 2013-09-17 00:08:34
我构造了一组函数来专门处理这些类型的问题:https://github.com/JDBurnZ/anyarray
最棒的是,这些函数适用于所有数据类型,而不只是整数,因为intarray是受限制的。
从GitHub加载这些SQL文件中定义的函数后,您需要做的就是:
SELECT
ANYARRAY_DIFF(
ARRAY[12, 3, 5, 7, 8],
ARRAY[3, 7, 8]
)返回类似于:ARRAY[12, 5]的内容
如果您还需要返回排序后的值:
SELECT
ANYARRAY_SORT(
ANYARRAY_DIFF(
ARRAY[12, 3, 5, 7, 8],
ARRAY[3, 7, 8]
)
)准确返回:ARRAY[5, 12]
https://stackoverflow.com/questions/6533029
复制相似问题