Best practices for databasedesign anbefaler at bruge UNIQUE-begrænsningen for at forhindre dubletter i en database. Men når du arbejder med en dårligt designet database eller urene data, skal du muligvis selv finde dubletter og slette dem manuelt.
Læs videre for at lære, hvordan du finder dubletter i en SQL-database, og hvordan du sletter dem.
Opret en prøvedatabase
Til demonstrationsformål skal du oprette en tabel med navnet Brugere med en kolonne med navn og score ved at køre denne SQL-forespørgsel.
DRÅBEBORDHVISEKSISTERERBrugere;
SKABBORDBrugere (
pk_id int PRIMÆRNØGLE,
navn VARCHAR (16),
score INT,
);
Indsæt nogle eksempelværdier ved at køre denne forespørgsel:
INDSÆTIND I
Brugere (pk_id, navn, score)
VÆRDIER
(1, 'Jane', 20),
(2, 'John', 13),
(3, 'Alex', 32),
(4, 'John', 46),
(5, 'Jane', 20),
(6, 'Mary', 34),
(7, 'Jane', 20),
(8, 'John', 13)
Bemærk, at nogle af disse rækker indeholder duplikerede værdier for navnekolonnen.
Tjek gerne disse ud SQL kommandoer og forespørgsler hvis du har brug for en mere dybdegående forklaring på, hvordan du manipulerer databaser ved hjælp af SQL.
Brug GROUP BY til at finde duplikerede værdier
Du kan brug GROUP BY-sætningen til at arrangere værdier der opfylder visse betingelser i samme gruppe.
Lad os sige, at navnene i eksempeltabellen skal være unikke. Du kan bruge GROUP BY til at gruppere rækkerne med samme navn.
VÆLGnavn, TÆLLE(navn)
FRA brugere
GRUPPER EFTER navn
HAR ANTAL(navn) > 1
COUNT lader dig vælge de rækker, der har mere end én bruger med samme navn.
Når du kører denne forespørgsel, vil databasen returnere rækker, der indeholder John og Jane som dubletter.
Sletning af dubletter fra en database
Når du har fundet dubletterne, vil du måske slette dem ved hjælp af DELETE-sætningen.
For dette eksempel skal du køre følgende forespørgsel:
MED cte SOM (
VÆLG *
ROW_NUMBER() OVER (
OPDELING AF
navn, score
BESTIL EFTER
navn, score
) R
FRA
Brugere
)
SLETFRA cte
HVOR R > 1;
Denne forespørgsel bruger et CTE-udtryk til at finde dubletterne og sletter dem alle undtagen én.
Hvorfor du skal slette duplikerede data
Sletning af duplikerede data er ikke et must. Det giver dig dog mulighed for at frigøre den plads, som duplikerede rækker bruger.
Færre rækker betyder også, at forespørgsler kan udføres meget hurtigere, hvilket fører til højere ydeevne. Brug forespørgslerne i denne vejledning til at hjælpe dig med at finde og fjerne dubletter fra en SQL-database.