Ich habe immer über den UNION
Operator in SQL gewusst , aber erst kürzlich festgestellt, dass es andere Mengenoperatoren gibt, INTERSECT
und EXCEPT
. Ich konnte keinen Operator finden, der den vierten großen Mengenoperator ausführt, den symmetrischen Unterschied (z INTERSECT
. B. das Gegenteil von .)
Es sieht so aus, als könnte ich mit so etwas die gewünschte Ausgabe erzielen
SELECT Field FROM A UNION SELECT Field FROM B
EXCEPT
SELECT Field FROM A INTERSECT SELECT Field FROM B
(vorausgesetzt, ich habe den richtigen Vorrang) oder durch einen 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
Beide sehen jedoch nach ziemlich intensiven Abfragen aus, insbesondere im Vergleich zu den anderen drei grundlegenden Mengenoperationen. Gibt es eine symmetrische Differenzoperation in SQL und ich kann sie in der Dokumentation einfach nicht finden? Oder gibt es eine "kanonische" Möglichkeit, es in T-SQL zu implementieren?
FULL JOIN
dies effizienter sein kann. Tests können zeigen, welches am besten ist. Und wenn mehr / unterschiedliche Spalten aus jeder Tabelle benötigt werden, ist meine Lösung natürlich nicht einfach zu erweitern.
(a EXCEPT b) UNION ALL (b EXCEPT a);
könnte effizienter sein.