Được rồi, đây là những gì tôi muốn giới thiệu. Bạn muốn thay đổi mệnh đề where của mình để chỉ xác định các bản sao. Ngoài ra, bạn thực sự chỉ muốn xem xét các bản ghi đang hoạt động vì nó không quan trọng nếu có bản sao của các bản ghi không hoạt động.
Để xem có trùng lặp hay không, bạn có thể sử dụng exists
. Để sử dụng tồn tại, trước tiên chúng ta sẽ viết một truy vấn con để lấy lại các bản ghi trùng lặp, hay bất kỳ thứ gì có cùng họ và tên, một id khác và cũng đang hoạt động. Nếu truy vấn con kéo thứ gì đó trở lại, tồn tại sẽ trả về true và chúng tôi sẽ cập nhật bản ghi. Nếu không có bản sao, truy vấn con sẽ không lấy bất kỳ bản ghi nào và bản ghi tồn tại sẽ trả về false. Sau đó, chúng tôi sẽ không cập nhật hồ sơ.
update u
set active = 0
From UserInfo u
where (SELECT count(*)
FROM UserRecords recs
where recs.UserId= u.UserId) = 0
and u.active = 1
and exists (Select 1
From UserInfo u2
Where u2.lastname = u.lastname
and u2.firstname = u.firstname
and u2.userid <> u.userid
and u2.active = 1)