Saya selalu tahu tentang UNION
operator dalam SQL, tetapi hanya baru-baru ini menemukan bahwa ada set operator lain, INTERSECT
dan EXCEPT
. Saya belum dapat menemukan operator yang melakukan operator set besar keempat, perbedaan simetris (misalnya kebalikan dari INTERSECT
.)
Sepertinya saya bisa mendapatkan output yang diinginkan dengan menggunakan sesuatu seperti
SELECT Field FROM A UNION SELECT Field FROM B
EXCEPT
SELECT Field FROM A INTERSECT SELECT Field FROM B
(dengan asumsi saya mendapat hak diutamakan), atau dengan melakukan 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
Tetapi keduanya tampak seperti pertanyaan yang agak intensif, terutama dibandingkan dengan tiga operasi dasar lainnya. Apakah ada operasi perbedaan simetris dalam SQL dan saya tidak bisa menemukannya di dokumentasi? Atau apakah ada cara "kanonik" untuk mengimplementasikannya dalam T-SQL?
FULL JOIN
mungkin lebih efisien. Pengujian dapat mengungkapkan mana yang terbaik. Dan tentu saja, jika lebih banyak / kolom berbeda dari setiap tabel diperlukan, solusi saya tidak mudah diperluas.
(a EXCEPT b) UNION ALL (b EXCEPT a);
mungkin lebih efisien.