Ho sempre saputo UNIONdell'operatore in SQL, ma solo di recente ho scoperto che c'erano altri operatori di set INTERSECTe 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 JOINpotrebbe 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.