さて、これが私がお勧めするものです。 where句を変更して、重複のみを指定したいとします。また、非アクティブなレコードの重複があるかどうかは問題ではないため、実際にはアクティブなレコードのみを確認する必要があります。
重複があるかどうかを確認するには、exists
を使用できます 。存在を使用するために、最初にサブクエリを記述して、重複するレコードをプルバックします。これは、同じ名前と姓、異なるIDを持ち、アクティブなものです。サブクエリが何かをプルバックすると、existsはtrueを返し、レコードを更新します。重複がない場合、サブクエリはレコードを取得せず、existsはfalseを返します。その後、レコードは更新されません。
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)