sql >> Database >  >> RDS >> Mysql

Opschoningsupdate voor dubbele vermeldingen

Oké, dus dit is wat ik zou aanraden. U wilt uw waar-clausule wijzigen om alleen de duplicaten op te geven. Bovendien wilt u eigenlijk alleen naar de actieve records kijken, omdat het niet uitmaakt of er duplicaten zijn van inactieve records.

Om te zien of er een duplicaat is, kunt u een exists . gebruiken . Om de bestaande te gebruiken, gaan we eerst een subquery schrijven om dubbele records terug te halen, oftewel alles met dezelfde voor- en achternaam, een andere id, en is ook actief. Als de subquery iets terughaalt, zal exist true retourneren en zullen we de record bijwerken. Als er geen duplicaten zijn, zal de subquery geen records ophalen en zal het bestaan ​​false retourneren. Dan zullen we het record niet bijwerken.

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)


  1. php (fuzzy) zoekovereenkomst

  2. Trigger om alleen te activeren als aan een voorwaarde is voldaan in SQL Server

  3. Databasetijdzone instellen voor een AWS RDS-instantie

  4. mysql-groepering terwijl een waarde in een bereik ligt