Dobře, takže tady je to, co bych doporučil. Chcete změnit klauzuli where tak, aby specifikovala pouze duplikáty. Také se opravdu chcete podívat pouze na aktivní záznamy, protože nezáleží na tom, zda existují duplikáty neaktivních záznamů.
Chcete-li zjistit, zda existuje duplikát, můžete použít exists
. Abychom mohli použít exists, nejprve napíšeme poddotaz, abychom stáhli duplicitní záznamy, alias cokoli se stejným jménem a příjmením, jiným ID a je také aktivní. Pokud poddotaz něco stáhne zpět, exists vrátí true a záznam aktualizujeme. Pokud neexistují žádné duplikáty, poddotaz nezachytí žádné záznamy a hodnota exists vrátí hodnotu false. Poté záznam nebudeme aktualizovat.
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)