Beste praksis for databasedesign anbefaler å bruke UNIQUE-begrensningen for å forhindre duplikater i en database. Men når du arbeider med en dårlig utformet database eller urene data, må du kanskje finne duplikater selv og slette dem manuelt.
Les videre for å lære hvordan du finner duplikater i en SQL-database og hvordan du sletter dem.
Opprett en prøvedatabase
For demonstrasjonsformål kan du opprette en tabell med navnet Brukere med en navn og poengsum ved å kjøre denne SQL-spørringen.
MISTEBORDHVISFINNESBrukere;
SKAPEBORDBrukere (
pk_id int PRIMÆRNØKKEL,
navn VARCHAR (16),
score INT,
);
Sett inn noen eksempelverdier ved å kjøre denne spørringen:
SETT INNINN I
Brukere (pk_id, navn, poengsum)
VERDIER
(1, 'Jane', 20),
(2, 'John', 13),
(3, "Alex", 32),
(4, 'John', 46),
(5, 'Jane', 20),
(6, 'Mary', 34),
(7, 'Jane', 20),
(8, 'John', 13)
Merk at noen av disse radene inneholder dupliserte verdier for navnekolonnen.
Sjekk gjerne ut disse SQL-kommandoer og spørringer hvis du trenger en mer dyptgående forklaring på hvordan du manipulerer databaser ved hjelp av SQL.
Bruke GROUP BY for å finne dupliserte verdier
Du kan bruk GROUP BY-setningen for å ordne verdier som oppfyller visse vilkår i samme gruppe.
La oss si at navnene i eksempeltabellen må være unike. Du kan bruke GROUP BY for å gruppere radene som deler samme navn.
PLUKKE UTNavn, TELLE(Navn)
FRA brukere
GRUPPER ETTER navn
HAR ANTALL(navn) > 1
COUNT lar deg velge radene som har mer enn én bruker med samme navn.
Når du kjører denne spørringen, vil databasen returnere rader som inneholder John og Jane som duplikater.
Slette duplikater fra en database
Etter å ha funnet duplikatene, kan det være lurt å slette dem ved å bruke DELETE-setningen.
For dette eksemplet, kjør følgende spørring:
MED cte SOM (
PLUKKE UT *
ROW_NUMBER() OVER (
DELING AV
navn, poengsum
REKKEFØLGE ETTER
navn, poengsum
) R
FRA
Brukere
)
SLETTFRA cte
HVOR R > 1;
Denne spørringen bruker et CTE-uttrykk for å finne duplikatene og sletter deretter alle unntatt én.
Hvorfor du bør slette dupliserte data
Sletting av dupliserte data er ikke et must. Den lar deg imidlertid frigjøre plassen som dupliserte rader bruker.
Færre rader betyr også at spørringer kan utføres mye raskere, noe som fører til høyere ytelse. Bruk spørringene i denne opplæringen for å hjelpe deg med å finne og fjerne duplikater fra en SQL-database.