我有两个数组[1,2,3,4,7,6]
and [2,3,7]
在 PostgreSQL 中可能有共同的元素。我想做的是从第一个数组中排除第二个数组中存在的所有元素。
到目前为止我已经取得了以下成果:
SELECT array
(SELECT unnest(array[1, 2, 3, 4, 7, 6])
EXCEPT SELECT unnest(array[2, 3, 7]));
但是,顺序不正确,因为结果是{4,6,1}
而不是想要的{1,4,6}
。
我怎样才能解决这个问题 ?
我最终创建了一个具有以下定义的自定义函数(取自here https://stackoverflow.com/questions/37917905/how-to-remove-elements-of-array-in-postgresql)这解决了我的问题:
create or replace function array_diff(array1 anyarray, array2 anyarray)
returns anyarray language sql immutable as $$
select coalesce(array_agg(elem), '{}')
from unnest(array1) elem
where elem <> all(array2)
$$;