ArrXor

来自 PostgreSQL 维基
跳转到导航跳转到搜索

数组 XOR (对称差)

库代码片段

ArrXor

适用于 PostgreSQL

9.0+

SQL

依赖于


接受两个数组,并返回在两个数组中都找不到的元素(类似于在两个数组之间使用 EXCEPT)。原始讨论可以在这里找到:http://markmail.org/message/o2f5hvq5vpxqzou7

在 PostgreSQL 9.0+ 中测试

"在数学中,两个集合的对称差是指属于这两个集合之一而不属于它们的交集的元素集合。集合 A 和 B 的对称差通常用 A Δ B 表示"。来自 http://en.wikipedia.org/wiki/Symmetric_difference

create or replace function arrxor(anyarray,anyarray) returns anyarray as $$
select ARRAY(
        (
        select r.elements
        from    (
                (select 1,unnest($1))
                union all
                (select 2,unnest($2))
                ) as r (arr, elements)
        group by 1
        having min(arr) = max(arr)
        )
)
$$ language sql strict immutable;