Denne artikel forklarer processen udførelse af SQL-sletningsaktivitet for duplikatrækker fra en SQL-tabel.
Introduktion
Vi bør følge visse bedste fremgangsmåder, når vi designer objekter i SQL Server. For eksempel skal en tabel have primære nøgler, identitetskolonner, klyngede og ikke-klyngede indekser, begrænsninger for at sikre dataintegritet og ydeevne. Selv vi følger de bedste fremgangsmåder, og vi kan blive udsat for problemer som duplikatrækker. Vi får muligvis også disse data i mellemliggende tabeller i dataimport, og vi vil fjerne duplikatrækker, før vi faktisk indsætter i produktionstabellerne.
Antag, at din SQL-tabel indeholder duplikatrækker, og du vil fjerne disse duplikatrækker . Mange gange står vi over for disse problemer. Det er også en god praksis at bruge de relevante nøgler, begrænsninger for at eliminere muligheden for duplikerede rækker, men hvis vi allerede har duplikerede rækker i tabellen. Vi er nødt til at følge specifikke metoder for at rydde duplikatdata. Denne artikel udforsker de forskellige metoder til at fjerne duplikatdata fra SQL-tabellen.
Lad os oprette en prøve Medarbejdertabel og indsætte et par poster i den.
I tabellen har vi en få duplikatposter, og vi skal fjerne dem.
SQL slette duplikatrækker ved hjælp af Group By og have klausul
I denne metode bruger vi SQL GROUP BY-klausulen til at identificere duplikatet rækker. Gruppen efter klausul grupperer data i henhold til de definerede kolonner, og vi kan bruge COUNT-funktionen til at kontrollere forekomsten af en række.
For eksempel udfør følgende forespørgsel, og vi får de poster, der har forekomst større end 1 i medarbejdertabellen.
I outputen ovenfor har vi to duplikatposter med ID 1 og 3.
- Emp ID 1 har to forekomster i medarbejdertabellen
- Emp ID 3 har tre forekomster i medarbejdertabellen
Vi skal beholde en enkelt række og fjern de duplikerede rækker. Vi skal kun fjerne duplikatrækker fra tabellen. For eksempel vises EmpID 1 to gange i tabellen. Vi ønsker kun at fjerne en forekomst af den.
Vi bruger SQL MAX-funktionen til at beregne det maksimale id for hver datarække.
I det følgende skærmbillede kan vi se, at ovenfor Vælg sætning udelukker maks. id for hver duplikeret række, og vi får kun den minimale ID-værdi.
For at fjerne disse data skal du erstatte vælg først med SQL-sletningserklæringen efter følgende forespørgsel.
Når du har udført sletningserklæringen, skal du udføre en markering i en medarbejdertabel, og vi får følgende poster, der ikke indeholder duplikatrækker.
SQL sletter duplikatrækker ved hjælp af Common Table Expressions (CTE)
Vi kan bruge Common Table Expressions, almindeligvis kendt som CTE, til at fjerne duplikatrækker i SQL Server. Den er tilgængelig startende fra SQL Server 2005.
Vi bruger en SQL ROW_NUMBER-funktion, og den tilføjer et unikt sekventielt rækkenummer til rækken.
I den følgende CTE partitionerer den data ved hjælp af PARTITION BY-klausulen for og kolonnen og genererer et række nummer for hver række.
I output, hvis en række har værdien af kolonne større end 1, viser det, at det er en duplikat række.
Vi kan fjerne de dobbelte rækker ved hjælp af følgende CTE.
Det fjerner rækkerne med værdien større end 1
RANK-funktion for at SQL slette duplikatrækker
Vi kan også bruge SQL RANK-funktionen til at fjerne de duplikerede rækker. SQL RANK-funktion giver unikt række-ID for hver række uanset den duplikerede række.
I den følgende forespørgsel bruger vi en RANK-funktion med PARTITION BY-klausulen. PARTITION BY-klausulen forbereder et undersæt af data til de angivne kolonner og giver rang for den partition.
I skærmbilledet, du kan bemærke, at vi skal fjerne rækken med rang større end en. Lad os fjerne disse rækker ved hjælp af følgende forespørgsel.
Brug SSIS-pakke til SQL-sletning af duplikatrækker
SQL Server-integrationstjeneste giver forskellige transformation, operatører, der hjælper både administratorer og udviklere med at reducere manuel indsats og optimer opgaverne. SSIS-pakke kan også fjerne de duplikerede rækker fra en SQL-tabel.
Brug Sort Operator i en SSIS-pakke til at fjerne duplikering af rækker
Vi kan bruge en Sort-operator til at sortere værdierne i en SQL-tabel. Du kan spørge, hvordan datasortering kan fjerne duplikatrækker?
Lad os oprette SSIS-pakken for at vise denne opgave.
- I SQL Server Data Tools skal du oprette en ny integrationspakke.I den nye pakke skal du tilføje en OLE DB-kildeforbindelse
-
Åbn OLE DB-kildeditor og konfigurer kildeforbindelsen, og vælg destinationstabellen
-
Klik på Preview data, og du kan se, at vi stadig har duplikatdata i kildetabellen
-
Tilføj en sorteringsoperator fra SSIS-værktøjskassen til SQL-sletning, og slut den med kildedataene
For konfigurationen af sorteringsoperatoren skal du dobbeltklikke på den og vælge de kolonner, der indeholder duplikatværdier. I vores tilfælde er duplikatværdien i,, kolonner.
Vi kan også bruge de stigende eller faldende sorteringstyper til kolonnerne. Standardsorteringsmetoden er stigende. I sorteringsrækkefølgen kan vi vælge kolonnens sorteringsrækkefølge. Sorteringsrækkefølge 1 viser den kolonne, der først sorteres.
Nederst til venstre bemærkes et afkrydsningsfelt Fjern rækker med duplikerede sorteringsværdier.
Det gør opgaven med at fjerne duplikatrækker for os fra kildedataene. Lad os sætte et afkrydsningsfelt i dette afkrydsningsfelt og klikke på ok. Det udfører SQL-sletningsaktivitet i SSIS-pakken.
Når vi klikker på OK, vender det tilbage til fanen datastrøm, og vi kan se følgende SSIS-pakke.
Vi kan tilføje SQL Server-destinationer for at gemme dataene efter fjernelse af dubletter. Vi vil kun kontrollere, at sorteringsoperatøren udfører opgaven for os eller ej.
Tilføj en SQL Multicast-transformation fra SSIS-værktøjskassen som vist nedenfor.
For at se de forskellige data skal du højreklikke på stikket mellem Sort og Multicast. Klik på Enable Data Viewer.
Den samlede SSIS-pakke ser ud som nedenfor.
Udfør pakken for at udføre SQL-sletning. Det åbner View output for sortering af data ved opgaven Data flow. I denne datafremviser kan du se forskellige data efter fjernelse af de duplikerede værdier.
Luk dette, og SSIS-pakken vises med succes udført.
Konklusion
I denne artikel undersøgte vi processen med SQL-sletning af duplikatrækker ved hjælp af forskellige måder såsom T-SQL, CTE og SSIS-pakke. Du kan bruge den metode, hvor du har det godt. Jeg vil dog foreslå ikke at implementere disse procedurer og pakke direkte på produktionsdataene. Du skal teste i et lavere miljø.
- Forfatter
- Seneste indlæg
Han er skaberen af en af de største gratis online samlinger af artikler om et enkelt emne med sin 50-dels serie om SQL Server Always On Availability Groups. Baseret på hans bidrag til SQL Server-samfundet er han blevet anerkendt med forskellige priser, herunder den prestigefyldte “Årets bedste forfatter” kontinuerligt i 2020 og 2021 hos SQLShack.
Raj er altid interesseret i nye udfordringer, så hvis du har brug for rådgivning hjælp til ethvert emne, der er dækket af hans skrifter, han kan nås på [email protected]
Se alle indlæg af Rajendra Gupta
- Udfører mindre og større versionopgraderinger til AWS RDS SQL Server – 29. januar 2021
- Implementering af AWS RDS PostgreSQL-forekomster – 27. januar 2021
- Migrering af lokale SQL-databaser til AWS RDS SQL Server ved hjælp af AWS DMS – 25. januar , 2021