Ho sempre saputo UNION
dell'operatore in SQL, ma solo di recente ho scoperto che c'erano altri operatori di set INTERSECT
e EXCEPT
. Non sono stato in grado di trovare un operatore che esegua il quarto grande operatore, la differenza simmetrica (ad esempio il contrario di INTERSECT
.)
Sembra che riesca a ottenere l'output desiderato usando qualcosa di simile
SELECT Field FROM A UNION SELECT Field FROM B
EXCEPT
SELECT Field FROM A INTERSECT SELECT Field FROM B
(supponendo che ho ottenuto la precedenza giusta), o facendo un anti-full-join:
SELECT A.Field, B.Field
FROM A
FULL JOIN B ON B.Id = A.Id
WHERE B.Id IS NULL OR A.Id IS NULL
Ma entrambi sembrano query piuttosto intense, soprattutto rispetto alle altre tre operazioni di base. Esiste un'operazione di differenza simmetrica in SQL e non riesco proprio a trovarla nella documentazione? O esiste un modo "canonico" per implementarlo in T-SQL?
FULL JOIN
potrebbe essere più efficiente. I test possono rivelare qual è il migliore. E, naturalmente, se sono necessarie più / diverse colonne per ogni tabella, la mia soluzione non è facilmente espandibile.
(a EXCEPT b) UNION ALL (b EXCEPT a);
potrebbe essere più efficiente.