Tôi đã luôn biết về UNION
toán tử trong SQL, nhưng chỉ gần đây mới phát hiện ra rằng có các toán tử tập hợp khác INTERSECT
và EXCEPT
. Tôi chưa thể tìm thấy một toán tử nào thực hiện toán tử tập lớn thứ tư, sự khác biệt đối xứng (ví dụ ngược lại INTERSECT
.)
Có vẻ như tôi có thể có được đầu ra mong muốn bằng cách sử dụng một cái gì đó như
SELECT Field FROM A UNION SELECT Field FROM B
EXCEPT
SELECT Field FROM A INTERSECT SELECT Field FROM B
(giả sử tôi có quyền ưu tiên) hoặc bằng cách thực hiện chống tham gia đầy đủ:
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
Nhưng cả hai đều trông giống như các truy vấn khá chuyên sâu, đặc biệt là so với ba thao tác thiết lập cơ bản khác. Có một hoạt động khác biệt đối xứng trong SQL và tôi không thể tìm thấy nó trong tài liệu? Hoặc có cách "chính tắc" nào để triển khai nó trong T-SQL không?
FULL JOIN
có thể hiệu quả hơn. Kiểm tra có thể tiết lộ đó là tốt nhất. Và tất nhiên, nếu cần nhiều hơn / các cột khác nhau từ mỗi bảng, giải pháp của tôi không dễ dàng mở rộng.
(a EXCEPT b) UNION ALL (b EXCEPT a);
có thể hiệu quả hơn