# ArrXor

### From PostgreSQL wiki

## Array XOR (Symmetric Difference)

Takes two arrays and returns the elements not found in both array (akin to using EXCEPT between two arrays).
Original discussion can be found here: http://markmail.org/message/o2f5hvq5vpxqzou7

Tested in PostgreSQL 9.0+

"In mathematics, the symmetric difference of two sets is the set of elements which are in either of the sets and not in their intersection. The symmetric difference of the sets A and B is commonly denoted by A Δ B". From 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;