sql >> Database teknologi >  >> RDS >> Mysql

Oprydningsopdatering for duplikerede poster

Okay, så her er hvad jeg vil anbefale. Du vil ændre din where-klausul til kun at angive dubletterne. Desuden vil du egentlig kun se på de aktive poster, fordi det er lige meget, om der er dubletter af inaktive poster.

For at se om der er en dublet, kan du bruge en exists . For at bruge eksistensen skal vi først skrive en underforespørgsel for at trække duplikerede poster tilbage, alias alt med det samme for- og efternavn, et andet id, og det er også aktivt. Hvis underforespørgslen trækker noget tilbage, vil exist returnere true, og vi opdaterer posten. Hvis der ikke er nogen dubletter, vil underforespørgslen ikke fange nogen poster, og exists vil returnere falsk. Så opdaterer vi ikke posten.

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. Autofyld land og by fra postnummer og det modsatte

  2. Optimeringstærskler – gruppering og aggregering af data, del 5

  3. Django og skrivebeskyttede databaseforbindelser

  4. Lagring af stor JSON - binær eller tekst