Oke, jadi inilah yang saya sarankan. Anda ingin mengubah klausa where Anda untuk menentukan hanya duplikat. Juga, Anda benar-benar hanya ingin melihat catatan aktif karena tidak masalah jika ada duplikat catatan tidak aktif.
Untuk melihat apakah ada duplikat, Anda dapat menggunakan exists
. Untuk menggunakan yang ada, pertama kita akan menulis subquery untuk menarik kembali catatan duplikat, alias apa pun dengan nama depan dan belakang yang sama, id yang berbeda, dan juga aktif. Jika subquery menarik sesuatu kembali, ada akan mengembalikan true dan kami akan memperbarui catatan. Jika tidak ada duplikat, subquery tidak akan mengambil catatan apa pun dan yang ada akan mengembalikan false. Kemudian, kami tidak akan memperbarui catatan.
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)