- Chọn kết quả từ truy vấn cũ vào bảng tạm thời.
- Chọn kết quả từ truy vấn mới vào bảng tạm thời khác.
- Tham gia bên ngoài từ bảng này sang bảng khác, tương đương với tất cả các cột.
- Thêm mệnh đề where để chỉ trả về các hàng có các giá trị rỗng ở một bên hoặc bên kia.
Ví dụ, nếu kết quả trông giống như (theo lý thuyết):
UserId | FirstName | LastName | Email
Sau đó chạy mỗi truy vấn vào một bảng tạm thời riêng biệt với cấu trúc tương tự, nói #resOld
và '#resNew'.
Sau đó:
SELECT
*
FROM #resOld OLD
LEFT OUTER JOIN #redNew NEW -- LEFT OUTER JOIN, so we still retain rows which don't match
ON NEW.UserId = OLD.UserId
AND NEW.FirstName = OLD.FirstName
AND NEW.LastName = OLD.LastName
AND NEW.Email = OLD.Email
WHERE OLD.UserID IS NULL -- Only retain rows where we didn't match. Can use any field from OLD which cannot be null by design.
Truy vấn này sẽ chỉ trả lại hàng khi có hàng từ một kết quả thiết lập mà không phù hợp với các hàng trong khác.
EDIT: Đó là phức tạp hơn nó cần phải được, bạn chỉ có thể đảo ngược tiêu chí tham gia và loại bỏ WHERE như vậy:
SELECT
*
FROM #resOld OLD
INNER JOIN #redNew NEW -- Inner join where rows are different.
ON NEW.UserId != OLD.UserId
AND NEW.FirstName != OLD.FirstName
AND NEW.LastName != OLD.LastName
AND NEW.Email != OLD.Email
Bạn có thể cho chúng tôi biết cột Primary Key là gì không? Trường nào trong mỗi truy vấn là duy nhất cho mỗi hàng. –
Xin lỗi. Cả hai truy vấn chỉ trả lại một trường. Rõ ràng nó có cùng tên trong cả hai. Trường này không chứa giá trị trùng lặp. – Urbycoz